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