2015-04-21 137 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?