簡體   English   中英

設置屬性之前的指令負載

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM