2015-04-21 176 views
4

我有一個指令,包括基於範圍變量的HTML文件。 第一次加載HTML時,一切都很好。但是當範圍變量由ng-clic改變時,我不能記得指令。AngularJS - 刷新指令從控制器

這裏是我的指令:

my.directive('myType', function() { 
return { 
    restrict: 'A', 
    replace: true, 
    link: function($scope, element, attrs) {   
      var myHTML; 
      if ($scope.aType==1) myHTML = "aaaa"; 
      if ($scope.aType==2) myHTML = "bbbb"; 

      $scope.contentUrl = 'library/template/tmp-' + myHTML + '.html'; 
    }, 
    template: '<div ng-include="contentUrl"></div>' 
}}); 

$ scope.aType是,在NG-單擊更改範圍變量。 在此先感謝。

回答

5

您需要添加一個ATYPE或watch某種事件,使你的代碼運行超過一次(上聯):

是這樣的:

link: function($scope, element, attrs) {  
     $scope.$watch('aType', function(newVal, oldVal){ 
        var myHTML; 
        if ($scope.aType==1) myHTML = "aaaa"; 
        if ($scope.aType==2) myHTML = "bbbb"; 
        $scope.contentUrl = 'library/template/tmp-' + myHTML + '.html'; 
     }); 
    } 

JSFIDDLE

+0

謝謝阿米爾。但現在也第一次模板不加載(指令不要在模板中調用ng-include) – user1683405

+0

@ user1683405 - 我已編輯並添加JSFIDDLE。 –

+0

它的工作原理!謝謝 – user1683405

1

如果可以的話,我會避免使用$ watch(),這幾乎總是可以的。 您可以隨時設置ng-click將變量從您的指令傳遞到您的控制器,或者修改@Amir Popovich的答案以執行控制器中的邏輯,而不是在鏈接功能中。

有關如何訪問來自控制器的指令方法檢查出一個例子:Access parent controller methods from directive?