2012-09-28 27 views
19

Nói rằng tôi có những điều sau đây như một phần của định nghĩa directive tôi:Có cách nào để cung cấp giá trị mặc định cho bí danh phạm vi bị cô lập không?

scope: { 
    prop1: '@' 
} 

Có cách nào cho prop1 để có được một giá trị mặc định nếu các chỉ thị không có một thuộc tính prop1? Chắc chắn, tôi có thể kiểm tra xem nó được xác định bản thân mình và đặt nó, nhưng the property isn't always set when you would expect. Tôi chỉ tự hỏi nếu có bất kỳ cú pháp tôi bị mất trong tài liệu, hoặc nếu có một cách tiêu chuẩn tốt để làm điều này. Cảm ơn.

Trả lời

19

Tùy thuộc vào giá trị mặc định bạn muốn chỉ định. Nếu bạn muốn để mặc định một tên trong phạm vi phụ huynh, thiết lập một giá trị thuộc tính mặc định trong chức năng của thị compile sẽ làm việc:

 
    compile: function(element, attrs) { 
    if (attrs.person == undefined) { 
     attrs.$set("person", "person"); 
    } 
    ... 

Nếu bạn muốn chỉ thị để cung cấp các giá trị mặc định, nó được một chút tricker như Góc sẽ không cho phép bạn gán cho bí danh trong phạm vi cô lập (bạn sẽ nhận được một ngoại lệ "Mô hình không thể gán" ngoại lệ từ trình theo dõi đang cố gắng truyền phép gán cho phạm vi cha mẹ bị cô lập). Tuy nhiên bạn có thể ngăn chặn điều này bằng cách đánh dấu thuộc tính là tùy chọn (có nghĩa là Angular sẽ không đăng ký người nghe khi thuộc tính được ommited).

 
    scope: { 
    person: "=?" 
    }, 
    link: function(scope, element, attrs) { 
    if (scope.person == undefined) { 
     scope.person = "Bob"; 
    } 
    ... 
    } 
+1

Tôi chưa bao giờ thấy ký hiệu '?' Trong thuộc tính phạm vi trước đây. Có một số nơi được ghi chép? Hoặc một fiddle cho thấy rằng làm việc? – dnc253

+0

https://github.com/angular/angular.js/commit/ac899d0da59157fa1c6429510791b6c3103d9401 – epeleg

+1

Hai điều: 1) sử dụng 'angular.isUndefined (...)' và 2) nó được ghi lại ở đây: https: //docs.angularjs. org/api/ng/service/$ biên dịch # directive-definition-object – icfantv

-3
scope['prop1'] = scope['prop1'] || '@' 
+0

Tôi thấy rằng làm việc theo nghĩa javascript chung, nhưng câu hỏi này là khi xác định cụ thể một chỉ thị với AngularJS. Tôi không thấy làm thế nào tôi có thể sử dụng khái niệm tương tự ở đó. – dnc253

+0

góc cạnh sẽ ném một lỗi nếu bạn cố gắng thực hiện cú pháp này với cờ tùy chọn '? '. làm theo giải pháp trên bởi @niall. – icfantv

Các vấn đề liên quan