2016-05-12 56 views
0

我在我的应用程序中有一个奇怪的行为。angularjs - 父范围未创建,但仍在页面上可见

基本上,我有一个主页叫做细节,里面的细节叫做detailsAlldetailsEdit

默认的是detailsAll

如果我使用的应用程序,从导航到detailsAlldetailsEdit,一切正常,但是,如果我直接从detailsEdit加载应用程序,从details范围是不确定的。

它是有道理的,因为它可能还没有创建,因为我从来没有到过那个页面,但为什么即使它是未定义的(console.log打印undefined)我仍然可以看到打印在我的页面上的数据?

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

所以,当你近似熵的应用程序,网址如下:#/app/1(hard coded for test only)/edit/day/1等的第一页是detailsEdit子视图。

正如您所见,名为onlyOne的范围(从我的父级创建)在页面上可见,但同一确切范围在控制台中返回undefined。

$scope.test = $scope.onlyOne也是如此。没有显示,但如果你回到使用黄色按钮,然后选择其他的东西,那么它的工作原理。

如果您看到它在行动中很容易理解,所以请参阅上面的砰砰声。

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

任何帮助?

在此先感谢

回答

1

如果父母范围有一个属性,那么孩子将继承它的值,否则它会创建它自己的属性和空值分配给它。在稍后的时间点,如果父母定义了相同的属性,那么孩子将忽略父母的值。 在您的情况下,当您刚刚打开/ app/1/edit/day/1时,子女的$scope.onlyOne正在初始化为{}和父母的$scope.onlyOne在稍后的时间点被初始化,因为它是异步调用。这是你面临的问题的原因。

一种解决方案是在父添加监听和传播价值孩子一旦异步调用完成

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

+0

但为什么即使我其实TY重新创建的范围孩子使用相同的代码,在父母中创建相同的范围它仍然无法工作? – Nick

+0

当然它正在工作,https://plnkr.co/edit/rwxkOXEbfM0z1jOTWEHo?p=preview – CodingNinja

+0

这是一个内存方面不好的做法,让它再次创建?你认为这是实现这一目标的最佳和最有效的方式? – Nick