当属性值改变时更新指令视图
Update directive view when attribute value is changed
我有大约10个指令使用隔离作用域。它们都绑定到一个名为size
的参数。因此,我计划创建一个通用指令suiCommon
,并将此指令包含在所有10个指令中。这样我就不需要为所有10个指令重复scope: { size: '@' }
。
在我当前的解决方案JSFiddle中,参数被正确地传递到指令中。但是,当该值在外部被更改时,指令中的值不会被更改并应用。
我的常用指令是:
angular.module('sui.common', [])
.directive('suiCommon', ['$timeout', function ($timeout) {
return {
restrict: 'A',
link: function (scope, iElement) {
var $parentElement = iElement.parent();
$timeout(function () {
scope.vm.size = $parentElement.attr('size');
});
}
}
}]);
我的十个指令中有一个是这样的:
angular.module('sui.rating', ['sui.common'])
.directive('suiRating', [function () {
return {
restrict: 'A',
scope: {},
template:
'<div sui-common class="ui {{vm.size}} rating sui-rating">Content</div>',
controllerAs: 'vm',
bindToController: true,
controller: ['$scope', function ($scope) {}]
};
}]);
这里是HTML:
<div ng-app="Joy" ng-controller="JoyCtrl as vm">
<div ng-click="vm.setSize()">Click to change size</div>
<div sui-rating size="{{vm.size}}"></div>
</div>
现在当size
通过ng-click
变为small
时,指令内部的值没有改变。在我的理解中,ng-click
将触发$scope.$apply
,这将重新渲染指令suiCommon
。看来我错了……
您可以考虑使用$cacheFactory将大小存储在一个地方,然后在每个指令中检索它。
在创建主模块时,执行如下操作:
.factory('appCache', function ($cacheFactory) {
var results = $cacheFactory('CurrentOrderCache');
return results;
})
Then在ui中常用:
appCache.put('suiCommonSize',10)
,在其他指令中使用:
appCache.get('suiCommonSize')
我应该补充一点,你还必须在任何你想引用它的地方注入appCache。
相关文章:
- 如何根据服务更改更新指令
- AngularJs在调用服务方法后更新指令
- 无法更新指令的模型
- Angular.js正在更新指令中的SVG模板
- 隔离未更新指令中值的作用域
- 角度指令模板输入不会更新指令范围
- AngularJS:在成功的HTTP请求后更新指令范围
- 动态更新指令 (1.2 rc3)
- 更新指令中的attrs值 - 如何在AngularJS中执行此操作
- angularjs中没有更新指令作用域变量
- 正在从工厂更新指令
- 异步上未更新指令作用域
- 文本框未更新指令中显示的值
- 在测试期间更改了单向绑定指令属性,没有更新指令范围
- 动态更新指令数据
- 动态添加元素后更新指令
- Angular在作用域变量改变后更新指令
- 不能更新指令中的$scope值
- 当属性值改变时更新指令视图
- 当输入改变时更新指令