0

我有一個嵌套在共享相同控制器的其他模板(菜單是父模板)中的模板。我的控制器從一個名爲counterOperations的服務中獲取值。雖然$ scope.total似乎在console.log中更新,但視圖不更新該值。

控制器

.controller('ListController', function ($scope, $http, $state, counterOperations, userService) { 

//Some code 

$scope.add = function (index) { 
     $scope.total = counterOperations.getTopCounter(); 
     console.log($scope.total); 
    }; 


}) 

模板

$stateProvider 
    .state('app', { 
     url: '/app', 
     abstract: true, 
     templateUrl: 'templates/menu.html', 
     controller: "ListController" 
    }) 

$stateProvider 
    .state('app.list', { 
     url: '/list', 
     views: { 
      'products': { 
       templateUrl: 'templates/product-list.html', 
       controller: "ListController" 
      } 
     } 
    }) 

與納克點擊我觸發從一個服務調用一些功能的功能

用於菜單的視圖可變

<span>{{total}}</span> 

我已經試過這種方式,更新的價值,但沒有什麼變化

setTimeout(function() { 
    $scope.total = counterOperations.getTopCounter(); 
}, 1000); 

任何想法?

+0

你計算的應用程序狀態和總想總要在app.list可見狀態呢? –

+0

$ ng.add func()是在app.list中單擊ng後觸發的。但{{total}}處於應用狀態。該值在counterOperations服務中計算,然後在共享控制器調用服務函數時更新$ scope.total。 – Korte

+0

你的應用程序狀態應該監視你的服務的變化!你的控制器的另一個實例改變了輸入,即從app.list中的一個。這不會被app.state自動獲取。您可以使用$ scope.watch查看值是否已更改! – skubski

回答

1

這裏您2個狀態「應用」和「app.list」具有相同的控制器,當你從「應用」到「app.list」改變狀態,無論同一控制器控制器將重新實例這意味着$ scope.total變量中的值將丟失,並將在下一個狀態中重置。

解決方案 -

分配總量達到$ rootScope如果你想讓它在其他國家也

$scope.add = function (index) { 
    $rootScope.total = counterOperations.getTopCounter(); 
}; 
+0

這解決了我的問題。非常感謝。 – Korte

0
.controller('ListController', function ($scope, $http, $state, counterOperations, userService) { 

//Some code 
$scope.total = ''; //or $scope.total = 0; 

$scope.add = function (index) { 
     $scope.total = counterOperations.getTopCounter(); 
     console.log($scope.total); 
    }; 


}) 

檢查上述內容是否適合您?

+0

我沒有提到我已經初始化$ scope。初始化的值爲0,並顯示正確。 – Korte