ui-router中的AngularJS组件/范围问题

时间:2019-02-22 09:25:53

标签: angularjs ecmascript-6 angular-ui-router

更改状态后,我在使用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元素):

On first load

更改状态(错误行为)后:

wrong flow

未来将调用updateData-它使用旧的(在scr上为14)作用域,但渲染为新的作用域。因此,我们看不到模板的任何更改。

有什么想法可以从这种情况中找出来吗?

1 个答案:

答案 0 :(得分:0)

已解决。

问题出在组件代码中-我忘记删除先前控制器实例上的所有引用,并且在更改状态后,该控制器仍保留在内存中(我不确定它如何连接到新的作用域对象,但它描述了解决方案)。

当您遇到这种情况时-尝试保留几乎为空的组件,然后会发现错误。