Javascript 属性值更改时更新指令视图

Javascript 属性值更改时更新指令视图,javascript,angularjs,angular-directive,Javascript,Angularjs,Angular Directive,我有大约10条使用隔离作用域的指令。它们都绑定到名为size的参数。因此,我计划创建一个通用指令suicomon,并将该指令包含在所有10个指令中。因此,我不需要对所有10条指令重复作用域:{size:'@} 在我当前的解决方案中,参数被正确地传递到指令中。但是,当值在外部更改时,指令中的值不会更改并应用 我的共同指示是: angular.module('sui.common', []) .directive('suiCommon', ['$timeout', function ($ti

我有大约10条使用隔离作用域的指令。它们都绑定到名为size的参数。因此,我计划创建一个通用指令suicomon,并将该指令包含在所有10个指令中。因此,我不需要对所有10条指令重复作用域:{size:'@}

在我当前的解决方案中,参数被正确地传递到指令中。但是,当值在外部更改时,指令中的值不会更改并应用

我的共同指示是:

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');
            });
        }
    }
}]);
我的10条指令之一如下:

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>
现在,当通过ng click将大小更改为小时,指令内的值不会更改。据我所知,ng click将触发$scope.$apply,它将重新呈现指令。看来我错了


谁能解释一下原因吗?如何修复它?或者有更好的解决方案吗?

< p>您可能想考虑使用$CaseFig来将大小存储在一个地方,然后在每个指令中检索它。 创建主模块时,请执行以下操作:

.factory('appCache', function ($cacheFactory) {
    var results = $cacheFactory('CurrentOrderCache');
    return results;
})
然后在通常情况下:

appCache.put('suiCommonSize',10)
在其他指令中使用:

appCache.get('suiCommonSize')

我应该补充一点,您还必须将appCache注入到您想要引用它的任何地方

这只是一个观点,但我觉得在每个指令中使用scope:{size:'@}比创建一个将参数注入其他指令的指令更清晰、更易于维护。更难理解你的生活中发生了什么directives@Okazari谢谢你的建议。我想有更好的方法来实现这一点。它实际上不需要$cacheFactory。在这种情况下,appCache可以只是一个空对象,但可以,一个用于存储公共数据的服务是可以的。