我正在研究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
不会在两个控制器中都更新。
我做错了什么?
答案 0 :(得分:2)
请勿使用Data
或data
等敏感密钥,也不要忘记包含依赖项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;
}]);