角度视图更改重置$ scope变量

时间:2016-07-20 23:32:35

标签: javascript html angularjs angularjs-ng-route

假设我有两个共享控制器的视图。两个视图都使用ng-route service。如果在一个视图中更改了范围变量,然后切换到第二个视图,那么第二个视图怎么不更新?

Example:我的控制器有一个= "hello"的变量。我在两个视图中都输出了这个变量。在view one我有一个onclick,它将变量更新为"Whatsup"。这工作正常,但在事件发生后我切换视图,第二个视图仍在输出"hello"。有没有办法分享这些?如果没有,那么共享数据的技术是什么?

2 个答案:

答案 0 :(得分:0)

我希望您知道AngularJS是为单页面应用程序(SPA)设计的所以框架不支持此行为。

每个视图都有不同的scope,即使它们共享同一个控制器。因此,更新一个视图的范围变量不会更新另一个视图。

如果您需要此行为,我建议您使用$on来收听事件。

此外,在您的代码中,您的控制器上的$scope.test = 'hi';是硬编码的,没有任何条件或任何原因,这就是为什么它反映了共享同一个控制器的两个视图的原因。

答案 1 :(得分:0)

最佳做法是每个控制器有一个视图。随着您的网站扩展,使用一个控制器管理多个模板/视图将变得非常困难。

服务是在控制器之间共享数据的方式。

对于您的示例,您可以使用在呈现每个视图时调用的激活函数,这些函数从您注入的服务获取更新的变量。您的on lick函数应该将变量保存到服务中,以使其可以跨控制器使用。