angularjs - 父作用域未创建但仍在页面上可见

时间:2016-05-12 13:36:38

标签: angularjs

我的应用中有一种奇怪的行为。

基本上,我有一个名为详细信息的主页,内部详细介绍了一个名为detailsAlldetailsEdit的子视图。

默认值为detailsAll

如果我使用从detailsAll导航到detailsEdit的应用,一切正常,但是,如果我直接从detailsEdit加载应用,details的范围是未定义。

这很有意义,因为它可能仍未创建,因为我从未到过该页面,但为什么即使它未定义(console.log打印未定义)我仍然可以看到我的页面上打印的数据?

这里有一个更好的例子:https://plnkr.co/edit/qBtT5gkVSkYfjbngZVqw?p=preview

因此,当您打开应用程序时,网址如下:#/app/1(hard coded for test only)/edit/day/1,因此第一页是detailsEdit子视图。

正如您所看到的,在页面上可以看到名为onlyOne(从我父项创建)的作用域,但在控制台中返回的是相同的确切作用域。

$scope.test = $scope.onlyOne也是如此。什么都没有显示,但是如果你回到使用黄色按钮,然后选择其他东西,那么它就可以了。

如果你看到它的实际效果会更容易理解,所以请参考上面的plunker。

为什么这样做?我虽然它是与缓存相关的东西,但我试图硬重置并且没有任何改变。

任何帮助?

提前致谢

1 个答案:

答案 0 :(得分:1)

如果父作用域具有属性,则子将继承它的值,否则它将创建它自己的属性并为其分配空值。在以后的某个时间点,如果父级定义了相同的属性,则子级将忽略父级的值 在您的情况下,当您刚刚打开/ app / 1 / edit / day / 1时,孩子$scope.onlyOne正在使用{}和父母$scope.onlyOne进行初始化由于它是异步调用,因此在稍后的时间点初始化。这就是你所面临问题的原因。

一种解决方案是在父级中添加侦听器,并在异步调用完成后将值传播给子级

https://plnkr.co/edit/9jS9qcwgecEJzqsD8L0z?p=preview