我正在编写指令,并且需要监视父作用域的更改。不知道我是否正在按照首选方式执行此操作,但是它不能与以下代码一起使用:

  scope.$watch(scope.$parent.data.overlaytype,function() {
    console.log("Change Detected...");
  })

它记录了窗口加载,但是即使更改了overlaytype,也不会再次登录。

如何查看overlaytype进行更改?

编辑:这是整个指令。不确定我为什么要使用 child 镜
/* Center overlays vertically directive */
aw.directive('center',function($window){
  return {
    restrict : "A",
    link : function(scope,elem,attrs){

      var resize = function() {
        var winHeight = $window.innerHeight - 90,
            overlayHeight = elem[0].offsetHeight,
            diff = (winHeight - overlayHeight) / 2;
            elem.css('top',diff+"px");
      };

      var watchForChange = function() {
        return scope.$parent.data.overlaytype;
      }
      scope.$watch(watchForChange,function() {
        $window.setTimeout(function() {
          resize();
        }, 1);
      })

      angular.element($window).bind('resize',function(e){
        console.log(scope.$parent.data.overlaytype)
        resize();
      });
    }
  };
});

最佳答案

您应该在子作用域上具有data属性,作用域在父作用域和子作用域之间使用原型(prototype)继承。

同样,$ watch方法期望的第一个参数是要评估的表达式或函数,而不是变量的值。因此,您应该发送它。

07-27 15:54