2016-03-01 93 views
0

我有一個簡單的應用程序,我想共享一個可以由控制器設置的對象,然後從另一個控制器訪問它以完成任務,在這裏是代碼:控制器之間的共享對象不適用於AngularJS中的服務

的index.html

<body ng-app="myApp"> 
     <ui-view></ui-view> 
    <!-- All js files included and working --> 
    <script type="text/javascript" src="angular/angular.min.js"></script> 
    <script type="text/javascript" src="angular/angular-ui-router.min.js"></script> 
    <script type="text/javascript" src="js/myApp.js"></script> 
    <script type="text/javascript" src="js/farms.js"></script> 
    </body> 

app.js

var app = angular.module("myApp", ['ui.router']); 

app.config(function config($stateProvider) { 
    $stateProvider.state("farm", { 
     url : "", 
     controller : "myFarmController as FarmCtrl", 
     templateUrl : "partials/farm.html" 
    }) 
    $stateProvider.state("sau", { 
     url : "/sau", 
     controller : "mySauController as SauCtrl", 
     templateUrl : "partials/sau.html" 
    }) 
}); 

// Service used to share data 
app.factory('Data', function(){ 
    return { farm: {idFarm:''} }; 
}); 

app.controller("mySauController", function($scope, $http, Data) { 
    $scope.Data = Data; 
} 

farm.html

{{Data.farm}} <!-- this prints {"idFarm":5} --> 
<div ui-sref="sau">GO TO SAU</div> 

farms.js

app.controller("myFarmController", function($scope, $http, Data) { 
$scope.Data = {"farm":{"idFarm":5}}; 
} 

sau.html:

{{Data.farm}} <!-- this prints {"idFarm":""} --> 

當我去farm.html,我看到物體顯示爲{"idFarm":5},但是當我點擊GO TO SAU我定義,它會加載sau.html,但我得到一個空對象{"idFarm":""},因爲它在工廠中已定義,所以兩個控制器或兩個部分之間沒有數據傳遞,farm.html & sau.html

非常感謝您的幫助。

回答

1

在myFarmController中,您不使用代碼中的服務。

嘗試這種情況:

app.controller("myFarmController", function($scope, $http, Data) { 
    Data.farm.idFarm = 5; 
    $scope.Data = Data; 
} 
+0

它的工作,非常感謝! – dwix

2

分配一個對象引用(Data服務)範圍屬性的要點是,它是持有它的所有範圍屬性之間共享。

什麼你基本上在這裏做

app.controller("myFarmController", function($scope, $http, Data) { 
$scope.Data = {"farm":{"idFarm":5}}; 
} 

被分配一個新的對象來$scope.Data,它無關,與原來的Data對象。您應該始終堅持使用

$scope.Data = Data; 
Data.farm = ...; 
// or $scope.Data.farm = ...; 

模式在範圍之間共享對象。

+0

我現在明白了,非常感謝您的幫助,我希望我也可以將其標記爲答案。 – dwix

相關問題