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

hak*_*aki 3 javascript angularjs

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

我在这个jsbin中设置了我的问题的简化例子

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

mus*_*_ut 5

当你在指令中处理JS事件时,你会错过一个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);
  });
});
Run Code Online (Sandbox Code Playgroud)

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