变量不更新外部函数

时间:2017-08-29 11:53:42

标签: javascript html angularjs

所以,我有两个控制器(为简单起见,它们已被简化),每个控制器都有一个功能。这些函数会更改每个控制器内的变量。问题是,看起来只有第一个控制器中的变量才会更新。

app.js

(function() {
  var app = angular.module('ScBO', []);
  var token = {};

  app.controller("LoginController", ['$http', function($http){
    this.userData = {};
    var lc = this;
    this.in = false;

    this.loginGo = function(){
      $http.post(<link>, <userData>)
      .then(function successCallback(response){
        token = response.data.access_token;
        lc.in=true;
      }, function errorCallback(response){
        lc.in=false;
      });
    };
  }]);

  app.controller("DashboardController", ['$http', function($http){
    var dsb = this;    
    this.totalLocals = 0;

    this.refresh = function(){
      $http.get('<link>?access_token='+token)
      .then(function successCallback(response){
        dsb.totalLocals = response.data.number_of_locals.number_of_locals;
      }, function errorCallback(response){
      });
    };
  }]);

})();

的index.html

<body ng-controller="LoginController as loginCtrl">
  <div id="login-div" ng-hide="loginCtrl.in">
    <form ...>
   ...
    </form>
  </div>


  <div id="dashboard" ng-show="loginCtrl.in" ng-controller="DashboardController as dsb">
    <div class="numbers">
     <p>Number of Locals</p>
     {{dsb.totalLocals}}
    </div>
   </div>
</body>

所以在html中,第一个div出现在开头而不是第二个。然后它隐藏,第二个div显示出来。这意味着他们正在跟踪loginCtrl.in变量的更新。 但是,当我调用刷新函数时,它不会更新最后一个div中的值。

我已尝试使用$ scope并一直在这里搜索,但我还没有找到解决方案。特别是因为两个控制器是相同的,但它们中只有一个似乎正在更新变量。

1 个答案:

答案 0 :(得分:0)

所以,我已经找到了问题所在。 在上面的代码中,错误没有显示,因为为了简单起见我只发布了部分代码,但我认为这已经足够了。

事情是:我有一个按钮,在不同的div中触发刷新功能(如@leonardoborges&#39; plunkr)。就像那两个控制器用他们自己的值实例化,这是我不知道的。超时功能会更新控制器的所有实例,因此让我感到困惑。

所以现在我把所有内容放在控制器的一个实例中。