1
在AngulerJS 1中創建了自定義指令。它具有隔離範圍,並且具有數據感知能力(從服務器API獲取數據)。它的定義如下:AngularJS隔離指令 - 數據不在.controller中綁定(但在.link中工作)
var dirJobView = function ($location, serviceData) {
return {
restrict: 'A',
templateUrl: '/app/views/Jobs/Item.html',
scope: {
itemid: "@"
},
controller: ['$scope', function ($scope) {
scope = $scope;
// does not work - data is not displayed in view:
serviceData.get('jobs', scope.itemid).then(function (data) {
scope.dataJobView = data;
});
}],
link: function (scope, elem, attrs, ctrl) {
}
};
}
上述操作無效 - 數據已加載,但視圖不顯示。更確切地說,如果我在瀏覽器中強制「清除緩存和硬重新載入」,它只會顯示它。
但是,它的工作原理perfeclty好,如果我移動服務調用鏈接功能,像這樣:
var dirJobView = function ($location, serviceData) {
return {
restrict: 'A',
templateUrl: '/app/views/Jobs/Item.html',
scope: {
itemid: "@"
},
controller: ['$scope', function ($scope) {
scope = $scope;
}],
link: function (scope, elem, attrs, ctrl) {
// Moved from controller, now works
serviceData.get('jobs', scope.itemid).then(function (data) {
scope.dataJobView = data;
});
}
};
}
據我所知,鏈接功能用於操縱DOM,控制器是指調用服務並定義行爲。服務數據的調用應該放在控制器中,不是嗎?
爲什麼上述工作的方式呢?
只是嘗試'$範圍適用於()'的'scope.dataJobView = data'後的控制器,並檢查是否有什麼變化。 – Sravan