我的应用中有一种奇怪的行为。
基本上,我有一个名为详细信息的主页,内部详细介绍了一个名为detailsAll
和detailsEdit
的子视图。
默认值为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。
为什么这样做?我虽然它是与缓存相关的东西,但我试图硬重置并且没有任何改变。
任何帮助?
提前致谢
答案 0 :(得分:1)
如果父作用域具有属性,则子将继承它的值,否则它将创建它自己的属性并为其分配空值。在以后的某个时间点,如果父级定义了相同的属性,则子级将忽略父级的值
在您的情况下,当您刚刚打开/ app / 1 / edit / day / 1时,孩子$scope.onlyOne
正在使用{}
和父母$scope.onlyOne
进行初始化由于它是异步调用,因此在稍后的时间点初始化。这就是你所面临问题的原因。
一种解决方案是在父级中添加侦听器,并在异步调用完成后将值传播给子级