hak*_*aki 3 javascript angularjs
我正在尝试从指令更新父作用域中的值的dict.dict父级通过一个函数更新(这里解释),所以我真的不明白为什么当我打印values我看到它们但是当绑定pre标签时它没有改变.另外,为什么field.error不在指令模板中显示?
我在这个jsbin中设置了我的问题的简化例子
Angular newbi,非常沮丧...谢谢.
当你在指令中处理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