更改状态后,我在使用ui-router和angularjs范围时遇到了麻烦-新创建的范围使用了旧控制器(反之亦然)。
我将以ES6风格编写的组件AngularJS "angular": "1.5.8"
和ui-router "@uirouter/angularjs": "^1.0.22"
用作类。
组件示例:
import template from './my-container.html';
export const MyContainer = {
bindings: {
},
template: template,
controller: class {
constructor($scope) {
'ngInject';
this.$scope = $scope;
...
路由/状态定义:
.state('mystate', {
url: '/mystate',
component: 'myPage' // in myPage <my-container>
})
问题: 在首页加载时,一切正常。但是,当我更改状态并返回时,任何更改都不会出现在模板中。
我提到$ scope。$ id已更改,但我的控制器仍使用以前的作用域对象。
为进行调试,我添加了两个控制台打印:onInit和myUpdateData函数内部。
在第一个屏幕截图中,我们可以看到正确的ID(初始化,更新func,来自模板/ dom元素):
更改状态(错误行为)后:
未来将调用updateData-它使用旧的(在scr上为14)作用域,但渲染为新的作用域。因此,我们看不到模板的任何更改。
有什么想法可以从这种情况中找出来吗?
答案 0 :(得分:0)
已解决。
问题出在组件代码中-我忘记删除先前控制器实例上的所有引用,并且在更改状态后,该控制器仍保留在内存中(我不确定它如何连接到新的作用域对象,但它描述了解决方案)。
当您遇到这种情况时-尝试保留几乎为空的组件,然后会发现错误。