javascript - 类更改时不会调用指令 $watch

标签 javascript angularjs angularjs-directive smartadmin

我有一个 Angular 应用程序,使用左侧菜单,带有显示/隐藏菜单栏,在左侧菜单上显示/隐藏的操作是“数据操作”。我使用的是智能管理,代码如下

<span class="minifyme" data-action="minifyMenu"> <i class="fa fa-arrow-circle-left hit"></i> </span>

当数据操作被触发时,主体部分类会发生更改或添加一个新类。

我的要求是对类(class)的变化做一些事情。我在主体上有一个指令 $watch for class。

指令代码肯定会在页面加载时被调用,但在类更改时(即执行数据操作时)不会被调用。

(function () {
var app = angular.module("myApp");

var myDirective = [function () {
    return {
        restrict: "A",
        link: function (scope, element, attrs) {

            initialize();

            scope.$watch(function () {
             return element.attr('class');
        }, function (newValue) {
            if (element.hasClass('test')) {
                console.log('has class.');
            } else {
                console.log('classremoved.');
            }
        });

            function initialize() {

            };
        }
    };
}];

app.directive('myDirective', myDirective);

}());

如何解决这个问题。

最佳答案

您需要在 $apply() 方法中执行此操作,因为数据操作超出了 Angular 上下文。

关于javascript - 类更改时不会调用指令 $watch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37956938/

相关文章:

javascript - Facebook 积分演示应用程序返回错误

javascript - 具有localStorage的BroadcastChannel-兼容性

javascript - 选择元素AngularJS的默认值

javascript - ng-click 不适用于动态 DOM AngularJS?

javascript - AngularJS 中未知数量输入的设置值

javascript - React 0.12+ 中如何处理组件引用变量和 props?

Javascript覆盖/添加方法到原型(prototype)

javascript - AngularJS : How to pass an object from the directive to transcluded template

javascript - “homecntrl”不是一个函数,在 angularjs 中未定义

javascript - 无法使用 AngularJS 中的 HTTP get 调用从 JSON 平面文件返回结果