我有這個plunker顯示我的問題:http://plnkr.co/edit/bNha1xOrnhnyhvXtXSnX?p=preview如何調查指令中的範圍?
angular.module('docsTransclusionExample', [])
.controller('Controller', ['$scope', function($scope) {
$scope.arr = [1,2,3,4];
}])
.directive('myDialog', function() {
return {
restrict: 'E',
scope: {
arr: '='
},
templateUrl: 'my-dialog.html',
link: function (scope) {
var lengthOfArray = scope.arr.length;
scope.test = 'The array length is ' + lengthOfArray;
}
};
});
在plunker,一切正常,我想:我設置scope.arr陣列,並在鏈接進行調查。這使我有可能將更多東西添加到示波器(測試)中,並將其打印出來。使用模板這樣的:
{{arr}} - {{test}}
..我得到這樣的結果:
[1,2,3,4] - The array length is 4
SO:在此實例中,陣列被設置在控制器上的正上方。但在我真正的實現中,數組是從服務器獲取的json對象。結果是,我不斷收到'未定義'的結果。我認爲這可能是由於指令詢問數據時的延遲(很小),直到它實際發送,同時指令中的鏈接沒有任何用處。
我可以嘗試一下嗎?
更新:
我做了這個Plunker,藉以說明問題:
http://plnkr.co/edit/bNha1xOrnhnyhvXtXSnX?p=preview
運行它,然後在結果窗口中,應該說是這樣的:
The array length is 5
(content of array...)
現在,如果你進入script.js(或任何其他文件),並添加一個linebre ak在底部什麼的,Plunker會重新加載頁面。然後,有時候,腳本將無法讀取該陣列,並且輸出只能是:
(content of array...)
我試圖添加表,但不知道,如果我做正確..因爲它似乎沒有工作。
另一個有趣的事情是,這往往不會像Plunker那樣運作。但在本地主機上,這從來不起作用。
更新2
我管理這個使用$表來解決。 Plunker更新到正確的解決辦法:http://plnkr.co/edit/bNha1xOrnhnyhvXtXSnX?p=preview
.directive('myDialog', function() {
return {
restrict: 'E',
scope: {
contentOfList: '='
},
templateUrl: 'my-dialog.html',
link: function (scope) {
scope.counter = 0;
scope.$watch('contentOfList', function() {
scope.counter = scope.counter + 1;
var lengthOfArray = scope.contentOfList.categoryList[0].rows.length;
scope.test = 'The array length is ' + lengthOfArray;
});
}
};
});
我已經完成了與您的建議不同的一點。請參閱我的第一篇文章的更新。 – 2014-10-13 10:30:57