我的指令包含基于范围变量的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上更改的范围变量。 提前谢谢。
答案 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';
});
}
答案 1 :(得分:1)
如果可以,我会避免使用$ watch(),这几乎总是可以。 您始终可以设置ng-click以将指令中的变量传递给控制器,或者修改@Amir Popovich的答案以在控制器中执行逻辑,而不是在链接功能中。
有关如何从控制器访问指令中的方法的示例,请查看:Access parent controller methods from directive?