[英]How to access to the controller scope from a directive inside ng-repeat?
我是AngularJS的新用戶,當我必須從ng-repeat中的指令訪問控制器中的變量時,我會陷入困境。 我認為它必須與范圍有關。
這是我的小提琴: http : //jsfiddle.net/Zzb58/1/
'MyCtrl'范圍有兩個屬性:“items”,一個數組和“thing”,只是一個字符串。
function MyCtrl($scope) {
$scope.items = [{id: 'item1'}, {id: 'item2'}];
$scope.thing = "thing";
}
所以,如果我創建一個指令並且我希望它能夠讀取數組的內容,那么這個指令非常有效:
<div my-directive ng-repeat="item in items" item='item'></div>
app.directive('myDirective', function () {
return {
restrict: 'AE',
scope: {
item: '=item',
},
template: '<div>{{ item.id }}</div>'
}
});
HTML已正確刷新。
但是如果我嘗試從指令中訪問“thing”變量,它總是被讀作“未定義”。
app.directive('myDirective', function () {
return {
restrict: 'AE',
scope: {
item: '=item',
thing: '='
},
template: '<div>{{ item.id }} - Here is not the {{thing}}</div>'
}
});
我認為問題必須與ng-repeat中創建的范圍子項相關,或者變量未正確綁定。
但是,如果我在模板中使用$ parent.thing,則讀取變量並對其進行正確計算,但我不知道該$ parent是否為ng-repeat范圍或“MyCtrl”范圍。
1)我做錯了什么?
2)為什么需要將ng-repeat中讀取的“item”元素作為HTML元素的屬性? 我首先想到“items”在父范圍內,所以當創建指令的隔離范圍時,我只需要執行類似“items:'='”的操作。
通過為其分配對象,可以創建隔離范圍。 如果設置scope : true
,則可以像在示例中一樣使用它,如果不是,則必須將其作為屬性傳遞,就像使用item
。
有關不同范圍模式的說明,您可以閱讀本頁的指令部分: https : //github.com/angular/angular.js/wiki/Understanding-Scopes
一般情況下,尤其是在使用繼承的范圍值時,我還強烈建議使用具有屬性集的對象,而不是簡單的字符串變量,因為這可能會導致整個范圍內的分離,這是由於原型繼承的工作原理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.