Angular.js - 从指令更新父范围

时间:2013-11-29 08:54:20

标签: javascript angularjs

我正在尝试从指令更新父作用域中的值的dict。 dict父级通过一个函数更新(解释here)所以我真的不明白为什么当我打印values我看到它们但是当绑定pre标签时它没有改变。 另外,为什么field.error没有显示在指令模板中?

我在此jsbin

中设置了问题的简化示例

Angular newbi,非常沮丧...谢谢。

1 个答案:

答案 0 :(得分:5)

当你在指令中处理JS事件时,你是missing a scope.$apply

事件处理发生在纯JS,外部角度上下文中,当您在父作用域上调用函数时,您将调用它,就像在任何其他普通JS对象上调用函数一样。保持普通JS对象而不是创建自己的对象层次结构,它们可以拦截函数调用,这是Angular与ember不同的设计选择。

更改范围,只是Angular不知道它。下次任何触发$digest循环时(例如,使用ng-click进行不同的按钮点击),更改将会显示。但是,我们可以做的是确保通过显式调用$digest来触发scope.$apply()循环。

解决方法是:

element.bind("blur change keyup", function() { 
  // This will tell Angular to rerun the $digest loop
  // as we are changing some variables which Angular
  // should be informed about.
  scope.$apply(function () {  
    var val = element.find("input").val();
    var oldval = scope.values[scope.field.name];
    if (oldval !== val && isValid(val))
      scope.set_value(scope.field.name,val);
    //else
    //  scope.set_value(scope.field.name,undefined);
  });
});

工作演示:http://jsbin.com/inoKOVU/1/edit