[英]Directive loads before attributes are set
我有一個如下所示的指令
app.directive("responses", function ()
{
return {
templateUrl: "/templates/responses.html",
link: function(scope, element, attrs, parentCtrl)
{
var type = attrs.type;
}
}
});
這是html標記中的指令。 type
屬性由控制器設置。 這是$http
調用的結果
<div responses type="{{Data.Type}}"></div>
但是,當指令去檢索該屬性時,父控制器尚未設置它。 因此,當指令加載時, type
最終將設置為空。 我想我可以用setInterval()
解析,但這似乎不是最好的方法。 有什么想法嗎?
這是簡化的控制器
controllers.AppCtrl = function($scope, $routeParams, $http)
{
$scope.Data ={
Type = ""
}
$http.get("http://restfulURI/3").success(function (result)
{
$scope.Data.Type = result.Type;
}
}
嘗試使用scope.$watch
代替:
app.directive("responses",function(){
return {
templateUrl: "/templates/responses.html",
link: function(scope, element, attrs, parentCtrl){
scope.$watch(attrs.type,function(newvalue,oldvalue){
//on attribute value changes
});
}
}
});
$watch
將在屬性屬性上添加一個偵聽器事件,一旦更改,它將在您的指令上觸發該事件。
這是punker演示
如果您想在屬性更改時啟動一些特殊操作,也需要使用觀察器,如果您不使用隔離范圍,則監視屬性沒有多大意義,因為無論如何您都可以訪問控制器作用域,因此您只能監視數據。類型更改。 為了提供更好的解決方案,我們需要更多地了解最終應用程序以及您想要實現什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.