AngularJS:当在视图中时,输入不会绑定到预期的作用域

25 浏览
0 Comments

AngularJS:当在视图中时,输入不会绑定到预期的作用域

我在视图内绑定输入时出现了问题。我以为它会绑定到控制器作用域,但实际上它绑定到了子作用域,所以无法更新到上层。

其他的项目如果在ng-repeat内部,它们会按照我期望的方式进行绑定(我不确定为什么)。

这里有一个示例:

http://jsfiddle.net/hMpsB/1/

如果输入不在ng-repeat内部,最佳的绑定方式是什么?

0
0 Comments

问题的原因是,当在ngView中创建子作用域时,会复制父作用域的值。如果父作用域的值是一个原始类型(如字符串),则子作用域只会复制该值,而不会建立与父作用域值的链接。因此,当在子作用域中修改输入时,只会修改子作用域的副本,而不会影响父作用域的值。

解决方法是将$scope.test绑定到一个对象而不是原始类型。通过这样做,子作用域将复制对象的引用,并最终修改同一个对象实例。

另外,可以考虑使用服务来在多个控制器之间共享数据。可以创建一个服务来持久化数据,以便在不同的控制器中使用。

此外,还可以尝试使用$parent来引用父作用域的值。但是需要注意的是,$parent是不被官方文档支持的,而且如果在其他地方引入另一个子作用域,可能会导致混乱。

解决该问题的方法有两种:将$scope.test绑定到对象而不是原始类型,或者使用服务来在多个控制器之间共享数据。同时,还可以尝试使用$parent来引用父作用域的值,但需要注意其潜在的问题。

0