2013-10-17 26 views
34

Tôi muốn chuyển mô hình ng của mình từ 'chỉ thị bên ngoài' sang 'bên trong diretive' (được chứa trong mẫu chỉ thị bên ngoài).Truyền mô hình ng trong các chỉ thị lồng nhau

Cách chính xác để thực hiện điều đó là gì?

HTML code:

<body> 
    <outer-directive ng-model="prop" /> 
</body> 

và mã chỉ thị:

angular.module('app', []).directive('outerDirective', function(){ 
    return { 
     template: '<inner-directive ng-model="prop" />', 
     link: function() { ... } 
    } 
}); 
+1

Rất trực quan: http://jsfiddle.net/cherniv/UAvaB/ – Cherniv

Trả lời

44

Bạn có thể thiết lập một liên kết hai chiều (xem documentation, phần "Chỉ Định nghĩa đối tượng") với các biến trong Thuộc tính ngModel, giống như với bất kỳ chỉ thị nào khác:

<my-directive ng-model="foo"></my-directive> 
myApp.directive('myDirective', function() { 
    return { 
     template: '<div><input type="text" ng-model="ngModel" /></div>', 
     replace: true, 
     scope: { 
      ngModel : '=', 
     }, 
    }; 
}); 

Fiddle

+3

Cảm ơn! Tôi không tin rằng nó sẽ dễ dàng vì vậy tôi đã thử một số điều khủng khiếp bằng cách sử dụng jquery bên trong chức năng liên kết mà không ai trong số họ làm việc ... – user2794782

+5

Điều này không giải quyết vấn đề của mô hình bên ngoài là '$ nguyên sơ = true' và mô hình của đầu vào '$ dirty = true'. Có cách nào để truyền các thay đổi trạng thái xác thực này sang chỉ thị 'ng-model' không? – jusopi

+2

Điều này không hoạt động nếu các chỉ thị có phạm vi phân lập trong các phiên bản góc sau này. –

0

tôi nghĩ rằng bạn cần phải vượt qua các hình thức trong các chỉ thị và thiết lập các hình thức bẩn bằng tay

<directive directive-form="editForm" ></directive> 

scope: { 
directiveForm:"=" 
}, 
link: function (scope, $elem, $attrs) 
{ 
    scope.directiveForm.$setDirty(); 
} 
Các vấn đề liên quan