2016-03-01 91 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

相关问题