2015-12-22 58 views
0

我在使用指令時遇到問題,而在父控制器中設置的某些範圍值在指令嘗試訪問時未設置。這是因爲在AJAX調用返回任何數據之前調用該指令。在繼續之前,有沒有什麼可以讓我的指令等待這些數據被設置?在獲取數據前執行的角度指令

angular.module('vt.directives', []) 
    .directive('personType', [function() { 
    return { 
     restrict: 'A', 
     replace: true, 
     scope: { 
      data: '=' 
     }, 
     template: '<div class="{{data.property}}"</div>', 
     link: function (scope, elm, attrs) { 
      console.log(scope.personType); 

     } 
    }; 
}]); 

<div ng-controller="parentcontroller"> 
    <div personType data="jsonobject"></div> 
</div> 

這裏我parentcontroller從服務中獲取數據,並傳遞給persontype指令,但指令persontype不等待,直到把JSONObject從服務中獲取,所以它造成了許多的問題。

+2

如果不等待會有什麼危害? – Rayon

+2

我認爲你的指令鏈接函數中的數據在'scope.data''中不在'scope.personType'中。 –

+1

當您在指令中執行'scope:{data:'='}'時,您正在設置雙向綁定,因此如第一條評論所述,如果不等待,綁定應在檢索數據時再次更新。您的console.log語句將只運行一次(即使您使用了正確的變量名稱,它也不會打印服務器響應)。您是否向我們展示了使用該指令的所有模板?如果還有更多,您可能會創建可能導致此類問題的子範圍。 –

回答

0

如果你希望你的範圍內的數據,personType那麼你必須

console.log($parse(attrs.personType)(scope)); 

分配數據personType指令本身

<div personType="jsonobject"></div> 

和訪問它,如果你要加載後這個數據AJAX調用,然後你可以$從你的服務發出你的數據,並通過$ on方法在你的指令中訪問它。

可能會對您的情況有所幫助:)