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,控制器是指調用服務並定義行爲。服務數據的調用應該放在控制器中,不是嗎?

爲什麼上述工作的方式呢?

+0

只是嘗試'$範圍適用於()'的'scope.dataJobView = data'後的控制器,並檢查是否有什麼變化。 – Sravan

回答

0

發現問題。在「scope = $ scope;」中缺少「var」。控制器高清體應該是這樣的:

controller: ['$scope', function ($scope) { 
      var scope = $scope; 
      // does not work - data is not displayed in view: 
      serviceData.get('jobs', scope.itemid).then(function (data) { 
       scope.dataJobView = data; 
      }); 
     }], 
相關問題