范围变量不会更新控制器angularjs与typescript

时间:2015-09-17 14:57:05

标签: javascript angularjs angularjs-scope typescript

我有一个子控制器调用父控制器中的函数的设置。父控制器中的方法被成功调用,但当我返回使用已修改函数的范围变量时,更改没有进行。

即。

  1. 调用函数将范围变量更改为= true
  2. 稍后调用另一个函数来检查范围变量值
  3. 范围变量still = false
  4. 第一个函数调用:

    public showDetails(): void {
        this.scope.menu.showDetails = true; 
    }
    

    2cd函数调用:

    // handle menu options
    public selectMenuOption(type: string): boolean {
        if (this.scope.menu.showDetails) { // value is still false
            // DO STUFF
        }
    }
    

    这两个函数都位于同一个控制器中,并且访问相同的控制器范围。

    除了将值初始化为false的构造函数外,它不会在其他任何地方使用。

    这与视图无关,控制器中的变量根本不更新。我知道要更新视图,你需要在某些情况下运行$ apply,并且我已尝试在showDetails()上使用$ apply来解决此问题。我刚刚得到的是一个非法的访问错误,这是你在$ digest循环中运行$ apply时得到的。

    我发现罪魁祸首是通过子控制器来更新父控制器中的值。即使子控制器调用父控制器函数正常,它似乎也不会以这种方式影响父控制器范围。

    要解决此问题,我会将此值添加到服务范围并以此方式更新父范围。我试图避免这一额外的步骤。除非某人有一个不涉及该服务的解决方案。

1 个答案:

答案 0 :(得分:0)

从问题:

  • 调用函数将范围变量更改为= true
  • 稍后调用另一个函数来检查范围变量值
  • 范围变量still = false

JavaScript 不是魔术。所以这种情况发生的唯一方法是:

  • 当你想到这个功能时,它不会被调用。 console.log是您调试此内容的最好朋友。
  • 你错了this。尝试在所有成员函数中使用arrow function