Javascript 监视{values}}上的更改以触发DOM的指令操作时出现问题

Javascript 监视{values}}上的更改以触发DOM的指令操作时出现问题,javascript,angularjs,animation,Javascript,Angularjs,Animation,我正在使用两个不同的控制器 第一个控制器前端有两个按钮。一个是递增按钮,另一个是递减按钮。当按下按钮时,表示按下哪个按钮的值存储在$rootScope中,并广播一个事件,让第二个控制器知道如何启动 第二个控制器使用ngRepeat显示对象中的每个元素。在这个应用程序中,每个元素代表一个学生。当按下递增或递减按钮时,第二个控制器必须更新我们正在实施曲线的每个学生的分数 [{ "name": "value", "grade": "value" },{ "name": "value", "grade"

我正在使用两个不同的控制器

第一个控制器前端有两个按钮。一个是递增按钮,另一个是递减按钮。当按下按钮时,表示按下哪个按钮的值存储在$rootScope中,并广播一个事件,让第二个控制器知道如何启动

第二个控制器使用ngRepeat显示对象中的每个元素。在这个应用程序中,每个元素代表一个学生。当按下递增或递减按钮时,第二个控制器必须更新我们正在实施曲线的每个学生的分数

[{
"name": "value",
"grade": "value"
},{
"name": "value",
"grade": "value"
},{
.
.
.
}];
我正在尝试编写一个指令,该指令将在按钮值更改之前添加一个类,这将触发淡出动画。然后我想有动画完成,并更新每个等级。最后,我想删除第一个动画淡出的类,并添加另一个类fadeIn。当fadeIn动画完成后,我想删除fadeIn类,以便将来的动画“递增”和“递减”按钮正确地按load

还有一种角度的方法可以延迟每次转换。ng enter stagge和。ng leave stagge,我想使用它,但我甚至不能得到指令来查看学生成绩的变化

我已尝试使用以下命令将类对象传递给我的指令:

scope: {
            class: '='
        },
因此,该指令可以访问student对象中的$watch更改,但运气不好。我也尝试过使用$observe,但也没有成功

有人知道我做错了什么吗?我应该使用postLink函数吗?我的名字是

啊!这应该很简单:为了访问父作用域值,您不需要为指令设置作用域:{}。事实上,这是一个适得其反的措施

相反,在link函数中添加$watch,并将true作为第三个参数传递。这将指示函数深入检查对象的值是否有更改,而不是进行浅层比较,浅层比较总是将对象引用与自身进行比较,因此永远不会触发回调

link: function(scope, element, attrs){
    $timeout(function(){$animate.removeClass(element, 'animated bounce');},1000);
    scope.$watch('class', function(newValue, oldValue) {
      if (newValue !== oldValue) { 
          console.log('new value:', newValue);
      }
    }, true);
}
如果您创建一个服务来管理您的数据,而不是使用$rootScope属性和事件,您还可能会发现,从几个方面衡量,生活会轻松得多