Tôi đang gặp rắc rối làm việc ra làm thế nào tôi có thể xác định một chỉ thị tùy chỉnh mà cả hai:góc chỉ thị: sử dụng ng mô hình trong phạm vi cô lập
- Sử dụng cô lập phạm vi, và
- Sử dụng chỉ thị ng-mô hình trong phạm vi mới bên trong mẫu của nó.
Dưới đây là một ví dụ:
HTML:
<body ng-app="app">
<div ng-controller="ctrl">
<dir model="foo.bar"></dir>
Outside directive: {{foo.bar}}
</div>
</body>
JS:
var app = angular.module('app',[])
.controller('ctrl', function($scope){
$scope.foo = { bar: 'baz' };
})
.directive('dir', function(){
return {
restrict: 'E',
scope: {
model: '='
},
template: '<div ng-if="true"><input type="text" ng-model="model" /><br/></div>'
}
});
Các hành vi mong muốn ở đây là giá trị của đầu vào chắc chắn sẽ sở hữu foo.bar
phạm vi bên ngoài của, qua phạm vi của chỉ thị (cô lập) phạm vi model
tài sản. Điều đó không xảy ra, bởi vì chỉ thị ng-if trên div kèm theo của mẫu tạo ra một phạm vi mới, do đó, nó là phạm vi model
của phạm vi được cập nhật, không phải là phạm vi của chỉ thị. Thông thường bạn giải quyết các vấn đề ng-mô hình này bằng cách đảm bảo có một dấu chấm trong biểu thức, nhưng tôi không thể thấy bất kỳ cách nào để làm điều đó ở đây. Tôi tự hỏi nếu tôi có thể có thể sử dụng một cái gì đó như thế này cho chỉ thị của tôi:
{
restrict: 'E',
scope: {
model: {
value: '=model'
}
},
template: '<div ng-if="true"><input type="text" ng-model="model.value" /><br/></div>'
}
nhưng điều đó không làm việc ...
Cảm ơn - Tôi hoàn toàn quên về $ parent.Điều này giải quyết được vấn đề của tôi trong trường hợp này, nhưng tôi vẫn hơi lưỡng lự về nó như một giải pháp đa năng: nó có nghĩa là tôi phải theo dõi các phạm vi mới được giới thiệu trong các mẫu của mình và cấp bậc nào của thứ bậc mà tôi cần mục tiêu, có vẻ như khá dễ bị lỗi ... – Duncan
Tôi đồng ý với bạn. Misko giải thích rằng ai đó đăng nhập một lỗi về điều này khoảng một lần một tuần - nó không thực sự là một lỗi, đó là cách thức hoạt động thừa kế nguyên mẫu. Để thiết lập đúng mô hình ng, bạn cần biết cách kế thừa phạm vi hoạt động ở mức độ sâu hơn, và các chỉ thị nào sẽ tạo ra các phạm vi con. Tôi không thể nghĩ ra một cách tốt hơn. – pixelbits
Vâng, điểm công bằng, mặc dù tôi đoán những gì tôi đã nhận được là có một vấn đề cụ thể với việc sử dụng ng-model = "$ parent.bar" như trái ngược với ng-model = "foo.bar", trong đó với Tôi luôn luôn phải suy nghĩ về nơi mà phạm vi con đang được tạo ra, trong khi với những thứ sau tôi không (miễn là tôi có thể giả định rằng không có phạm vi con có một tài sản gọi là 'foo'). – Duncan