如何根据指令控制器中的值修改指令的模板 URL
How can I modify my directive's templateURL based on values within its controller?
我有以下AngularJS指令及其控制器。
我想根据关联控制器中aB
和aC
的整数值设置templateURL
,而不是直接在指令的template
字段中输入 HTML。
如果aB + ac >= 10
,我希望它使用foo.html
否则我希望它使用bar.html
。我该怎么做?
myApp.directive('myDirective',function(){
return {
restrict:'E',
scope: {
myObject: '='
},
controller: 'myDirectiveCtrl',
controllerAs: 'myDrCtrl',
bindToController: true,
template: 'aB={{myDrCtrl.myObject.aB}} aC={{myDrCtrl.myObject.aC}}'
};
}
);
myApp.controller('myDirectiveCtrl', function($scope){
var self = this;
$scope.$watch(function() {return self.myObject}, function (objVal) {
console.log("watch fired");
console.log('objVal.aB = ', objVal.aB);
console.log('objVal.aC = ', objVal.aC);
},true);
});
指令的template
/templateUrl
选项在创建指令范围之前被计算。所以基本上你不能在函数templateUrl
那里得到范围变量。
但是,是的,您可以通过在那里使用 ng-include
指令来解决此问题,表达式将根据范围变量值动态创建 URL。
命令
myApp.directive('myDirective',function(){
return {
restrict:'E',
scope: {
myObject: '='
},
controller: 'myDirectiveCtrl',
controllerAs: 'myDrCtrl',
bindToController: true,
template: '<ng-include src="(aB + ac >= 10) ? ''foo.html'': ''bar.html''"></ng-include>'
};
}
);
你可以改用ngInclude:
myApp.directive('myDirective',function(){
return {
restrict:'E',
scope: {
myObject: '='
},
controller: 'myDirectiveCtrl',
controllerAs: 'myDrCtrl',
bindToController: true,
template: '<div ng-include="myObject.currentPath"></div>'
};
}
);
myApp.controller('myDirectiveCtrl', function($scope){
var self = this;
$scope.$watch(function() {return self.myObject}, function (objVal) {
objVal.currentPath = 'bar.html';
if(objVal.aB + objVal.aC >= 10){
objVal.currentPath = 'foo.html';
}
},true);
});
相关文章:
- Angularjs - 使用自定义指令验证初始 url 值
- 部分html视图's控制器未使用KendoPanelBar内容URL在指令模板URL中工作
- AngularJS将属性中的URL传递到指令的隔离范围-意外的令牌':'
- 角度.js指令模板 URL 无法绑定范围
- 如何从指令模板 URL 访问$rootScope变量
- 带有模板URL和隔离范围的角度测试指令
- ng-repeat中的加载指令(动态模板URL)
- 如何使用角度模块“ui-route”在指令中查找模板URL,而不会在MVC .NET上出现错误
- 相对模板Url in 指令 in AngularJS.
- 如何根据指令控制器中的值修改指令的模板 URL
- 拒绝执行 JavaScript URL,因为它违反了以下内容安全策略指令:
- 将模板url传递给angularjs指令
- 当URL通过HTML更改时,带有jQuery密钥绑定的AngularJS指令未正确加载绑定
- AngularJS指令模板URL需要前导斜杠,破坏测试
- 单指令Angular JS中的可选/多模板URL
- AngularJS V1.4.7指令模板URL动态路径
- AngularJS创建了一个指令,用正确的基url来扩展ng-include
- angular指令模板url中的内联javascript
- 通过URL获取svg数据的Angular指令
- AngularJS -尝试为url段创建自定义指令