AngularJS - 来自控制器的刷新指令

时间:2015-04-21 15:11:37

标签: angularjs angularjs-directive

我的指令包含基于范围变量的HTML文件。 当第一次加载HTML时一切都很好。但是当范围变量因ng-clic而变化时,我无法回忆指令。

这是我的指示:

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-click上更改的范围变量。 提前谢谢。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

如果可以,我会避免使用$ watch(),这几乎总是可以。 您始终可以设置ng-click以将指令中的变量传递给控制器​​,或者修改@Amir Popovich的答案以在控制器中执行逻辑,而不是在链接功能中。

有关如何从控制器访问指令中的方法的示例,请查看:Access parent controller methods from directive?