当前位置: 首页 > 面试题库 >

AngularJS监视父范围的变化

黄丰
2023-03-14
问题内容

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

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

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

我怎样看待overlaytype变化?

编辑:这是整个指令。不确定我为什么要使用儿童镜

/* 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 属性,作用域在父作用域和子作用域之间使用原型继承。

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



 类似资料:
  • 问题内容: 我有两个控制器,一个封装在另一个中。现在,我知道子范围从父范围继承属性,但是有没有办法更新父范围变量?到目前为止,我还没有遇到任何明显的解决方案。 在我的情况下,我在表单中有一个日历控制器。我想从父范围(即表单)更新开始日期和结束日期,以便表单在提交时具有开始日期和结束日期。 问题答案: 您需要在父作用域中使用一个对象(不是原始对象),然后就可以直接从子作用域中更新它 上级: ctrl

  • 问题内容: 我想知道如何在给定父范围的情况下获取所有子范围的列表。我可以从该范围的属性中找到$ childHead,$ childTail,$ nextSibling和$$ prevSibling。 我现在使用的方法是从父级获取childHead,然后使用nextSibling获取下一个孩子,直到nextSibling为空。 有没有更好的方法?鉴于我想在所有子项上调用方法[getModel],是否

  • 问题内容: 在angularJs中可以观看全局变量吗? 我从旧版代码中设置了一个window.test变量,然后我需要观察该变量以了解它是否存在。 我尝试过类似的东西 问题答案: 有些。您可以包含Angular 服务(如文档所述,比直接访问更安全): 然后使用watch函数作为您的第一个参数,如下所示: 演示小提琴 但是请注意,只有在触发Angular进行$ digest操作后,才会执行。一种可行

  • 问题内容: 如何从其父范围调用在子范围中定义的方法? http://jsfiddle.net/wUPdW/ 问题答案: 您可以从父母到孩子使用: 工作jsfiddle:http : //jsfiddle.net/wUPdW/2/ 更新 :还有另一个版本,耦合性更低,更易于测试: jsfiddle:http : //jsfiddle.net/uypo360u/

  • 问题内容: 我有一个从或指令属性或任何其他属性中获得的字符串,我想基于此在作用域上创建一个变量。所以: 但是,如果字符串包含一个或多个点,我想将其拆分并实际上“向下钻取”到作用域中。所以应该成为。这意味着简单版本不起作用! 在读取基于字符串的变量时,您可以通过做来获得这种行为,但是在分配值时如何实现呢? 问题答案: 我发现的解决方案是使用$ parse。 “将Angular表达式转换为函数。” 如

  • 我尝试注入$scope,然后使用,但这不起作用? 有人能提供建议吗?