Angular.js-从指令更新父作用域
Angular.js - updating parent scope from directive
我正在尝试从指令更新父作用域中的值的dict。dict父级是通过一个函数更新的(在这里解释),所以我真的不明白为什么当我打印values
时我会看到它们,但当与pre
标签绑定时,它不会改变。另外,为什么field.error
没有显示在指令模板中?
我在这个jsbin 中设置了一个简化的问题解决方案
棱角分明的新手,相当沮丧的一个。。。谢谢
在处理指令中的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);
});
});
工作演示:http://jsbin.com/inoKOVU/1/edit
相关文章:
- 对父作用域的指令更新延迟了一步
- 当我更新另一个作用域变量时,作用域变量会自动更新
- AngularJS select with ng选项不更新父作用域中的引用对象属性
- 如何更新作为属性传入的作用域变量
- 从$http.get调用更新Angular作用域变量
- 隔离未更新指令中值的作用域
- Angular.js-从指令更新父作用域
- 修改作用域变量后,未更新作用域绑定
- 角度指令的父作用域未更新UI
- 正在更新UI路由器状态更改上的父作用域
- 更新侧自调用函数中的外部作用域对象
- AngularJS:如何在指令范围的对象发生变化时更新与控制器作用域相关联的控制器作用域
- 在 AngularJS 中执行作用域函数内的服务后,范围变量不会更新
- 离子选择不会更新依赖于作用域变量的功能
- 在 $scope.$watch 中更新时,独立作用域绑定不起作用
- 作用域变量未在$Scope中更新$看
- Angular.js-视图不't在resize事件中更改作用域变量时更新
- AngularJs:将一个值传递给打开ngDialog的指令,然后将更新的值反映回根作用域
- AngularJS:指令作用域更新&单击事件
- 如何在回调函数中从另一个作用域更新变量