0
我想通过Angular指令监视某个特定的类当前是否在某个元素上。切换添加或删除该类的$ scope变量会触发指令更新一些内容。从指令中监视Angular指令中的类时出现奇怪的行为
但我所看到的是,第一个切换不需要,但随后的切换不会。更新因此不同步。这里有一个简化的例子,使用Monitor for class changing on element in AngularJS directive的解决方案。这里发生了什么,以及如何让类更改在指令内保持同步?非常感谢!
HTML:
<div ng-app="myApp" ng-controller="myCtrl">
<label>
<input type="checkbox" ng-model="compact" /> Compactify
</label>
<div>Compactify is set to: {{compact}}</div>
<div firefly class="crewList" ng-class="{compact: compact}"></div>
</div>
JS:
var app = angular.module('myApp', []);
app.controller('myCtrl', ['$scope', function($scope) {
$scope.compact = false;
}]);
app.directive('firefly', [function() {
return {
restrict: 'AE',
template: '<ul ng-class="{compact: compacted}"><li>Capt. Mal</li><li>Zoe</li><li>Wash</li><li>Kaylee</li><li>Book</li><li>Inara</li><li>Jayne</li><li>Simon</li><li>Spoilers, sweetie!</li></ul>',
link: function(scope, element, attrs) {
scope.insideCompactor = function() {
scope.compacted = element.hasClass('compact');
};
scope.insideCompactor();
scope.$watch(function() {return element.attr('class');}, function(newValue) {
scope.insideCompactor();
});
}
};
}]);
CSS:
.crewList {font-size: 2rem;}
.crewList UL.compact {font-size: 1rem;}
UPDA TE 虽然我还没有想出如何使这项工作,我确实弄清楚了更多关于这个问题。作为摘要循环的一部分,指令中的$ watch似乎在之前触发,该类实际上应用于元素本身。因此,指令的作用域变量与元素上的实际内容不同步。
我明白了。由于该值位于隔离范围内,因此可以直接$ watch(),而不是尝试观察返回当前班级列表的函数。这就是我所需要的,尽管我仍然想要一种方式来观察元素上类的共同点。谢谢! –