2017-08-29 106 views
0

因此,我有兩個控制器(它們已被簡化爲簡化),每個控制器都有一個函數。這些功能在每個控制器內改變一個變量。事情是,它看起來只有第一個控制器中的變量被更新。變量不更新外部函數

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中的值。

我已經嘗試過$範圍,並一直在這裏搜索,但我還沒有找到解決方案。特別是因爲兩個控制器是平等的,但其中只有一個似乎正常更新變量。

+0

你確定你的'$ http' req解決了嗎? – Rahul

+0

我做了這個plunkr試圖模擬你的問題,對我來說它似乎工作:https://plnkr.co/edit/ySNl3t17vKMgaRKn8LR6?p=preview – leonardoborges

+0

@Rahul我試着把一個console.log(response.data .nu​​mber_of_locals.number_of_locals);在分配給變量dsb.totalLocals之後,看到來自服務器的值是正確的。 – Johnny

回答

0

所以,我已經找到了問題。 在上面的代碼中,錯誤不會顯示,因爲我只爲了簡單而張貼了一部分代碼,但我認爲這已經足夠了。

事情是:我有觸發刷新功能在不同的div(如@leonardoborges'plunkr)的按鈕。就像那兩個控制器是用他們自己的值實例化的,這是我不知道的。超時功能更新控制器的所有實例,所以這讓我感到困惑。

所以現在我只是把一切都放在控制器的一個實例中。