控制器之间共享数据,Angularjs 1.3版本

时间:2015-04-01 01:37:10

标签: angularjs

我正在研究this jsfiddle,它位于angularjs 1.2.17中 但是,当我尝试使用angularjs 1.3.14的same script时,它会出错,请参阅控制台。

最后,当我再次使用1.3.14版本尝试this fiddle时:

<div ng-app='app'>
    <div ng-controller="firstctrl">
        <input type="text" ng-model="data.msg" />
         <h1>{{data.msg}}</h1>

    </div>
    <div ng-controller="secondctrl">
        <input type="text" ng-model="data.msg" />
         <h1>{{data.msg}}</h1>

    </div>
</div>

var app = angular.module('app', []);

app.factory('Data', function () {
    return {
        msg: "I am data from a service"
    };
});
app.controller('firstctrl', ['$scope', function($scope, Data){
    $scope.data = Data;
}]);
app.controller('secondctrl', ['$scope', function($scope, Data){
    $scope.data = Data;
}]);

我无法使其工作:它不会出错,但data.msg不会在两个控制器中都更新。

我做错了什么?

3 个答案:

答案 0 :(得分:2)

请勿使用Datadata等敏感密钥,也不要忘记包含依赖项Fiddle

答案 1 :(得分:0)

我认为问题与控制器与模块(app)的角线连接有关,声明控制器的正确方法与fiddle的修改版本类似:

//... your code myApp.controller('firstctrl', ['$scope', 'Data', function ($scope, data) { $scope.data = data; }]);

正如您所见,firstctrl现在按预期工作。

你的第三小提琴不起作用,因为你没有在控制器的声明功能上注射工厂。

答案 2 :(得分:0)

您应该将“数据”标识符提供给控制器中的数组。

我的回答如下:

app.controller('firstctrl', ['$scope', 'Data', function($scope, Data){
    $scope.data = Data;
}]);
app.controller('secondctrl', ['$scope', 'Data', function($scope, Data){
    $scope.data = Data;
}]);