1
我有一個JavaScript網格庫slickgrid指令。定義隔離範圍時的指令行爲更改
http://plnkr.co/edit/KWZ9i767ycz49hZZGswB?p=preview
我想要做的是通過選定的行備份控制器。所以我想使用獨立的作用域(使用'=')來獲得控制器和指令之間的雙向綁定。如果我定義的指令沒有任何類型的範圍聲明
一切正常。
<slickgrid id="myGrid" data="names" selected-item="selectedItem"></slickgrid>
app.directive('slickgrid', function() {
return {
restrict: 'E',
replace: true,
//scope: {
// selectedItem: '='
//},
template: '<div></div>',
link: function($scope, element, attrs) {
...
var redraw = function(newScopeData) {
grid.setData(newScopeData);
grid.render();
};
$scope.$watch(attrs.data, redraw, true);
但是,如果我去掉上面(19-21行中app.js)的線條,它看起來像$ $範圍觀看attrs.data對象的手錶正在調用重繪,但attrs.data被傳入爲未定義。
我分析可能是錯的,但我不知道爲什麼定義的範圍將導致此。有人可以解釋爲什麼可能嗎?
.nathan。
謝謝,我能夠得到這個工作。但是,我仍然不清楚爲什麼數據範圍需要封裝在蜱中。現在我必須弄清楚爲什麼{{selectedItem}}在指令中選擇一個新行時沒有更新! – nathasm 2013-03-16 01:25:24
@nathasm,如果[$ watch](http://docs.angularjs.org/api/ng.$rootScope.Scope#$watch)的第一個參數是一個字符串,那麼它將根據作用域進行評估,就像'ng-click ='someProperty = 22''或'ng-model ='someProperty''或'ng-show =「showIt」'。要讓{{selectedItem}}'更新:'$ scope.selectedItem = item; $範圍。$適用()'。 [Plunker](http://plnkr.co/edit/SJUJkgb4GgDwNlnJElBk?p=preview)。 – 2013-03-16 03:34:10