2016-01-09 24 views
0

我正在使用Angular JS中的Factory來使用router-ui在2個控制器/子視圖之間共享數據。多角度不更新Angular JS中的變量

廠:

app.factory('SharedData', function() { 
    return {data: {}}; 
}) 

JobsController:

app.controller("JobsController", function($scope, $http, $resource, $location, $stateParams, JobsService, $state, SharedData) { 
    SharedData.data = JobsService.query(); 

    $scope.data = SharedData.data; 
}); 

NavController:

app.controller("navController", function($scope, $state, SharedData) { 
    $scope.data = SharedData.data; 
}); 

jobs.html

{{data.jobs.length}} // this updates fine 

nav.html

{{data.jobs.length}} // this does not update 

相反,我必須這樣做:

NavController:

app.controller("navController", function($scope, $state, SharedData) { 
    $scope.data = SharedData; 
}); 

jobs.html

{{data.jobs.length}} // this works fine 

nav.html

{{data.data.jobs.length}} // this now works but not sure why the extra 'data' is needed? 

顯然我在這裏做錯了什麼,但我無法弄清楚儘管google搜索了好幾個小時......任何人都可以幫忙嗎?

+0

我建議在實例化兩個控制器之前在SharedData中加載'作業'數據。這可以通過使用StateProvider的[解析屬性](https://github.com/angular-ui/ui-router/wiki)來完成。 – tsuz

回答

0

這個怪癖與分配的順序有關。

當初始化SharedData時,它是具有單個屬性data的對象,它是一個空對象。

navController被初始化時,它的$scope.data被設置爲等於空對象SharedData.data

jobsController被初始化時,它替換SharedData.data與一個完全不同的對象。 之後$scope.data設置爲等於這個新對象,但navController仍然指向原來的空對象。

在您的第二個示例中,navController未指向即將被替換的此對象。相反,它指向SharedData對象本身,因此$scope.data.data將始終解決SharedData上當前存在的任何對象。