Angular Modal> Ctrl> Service> Ctrl继承不起作用
问题描述:
我试图将模型链接到服务,这将允许我在整个应用程序中更新全局模型,但它似乎没有按预期工作。Angular Modal> Ctrl> Service> Ctrl继承不起作用
我最近开始关注AngularJS,所以有可能我误解了我的代码,但是我知道服务将作为一个实例工作,反对一个工厂单例,它应该允许我使用服务来控制所有$范围内的模型。
我想我的连锁模式是这样的:
型号: {{language.title}}
>>>CTRL 1: $ scope.language = langSrvic.store ;
>>>srvic: langSrvic.store = myFactory;
>>>CTRL2: langSrvic.set( '区域设置', 'FR');更新
>>>语言实例存储(应反映在控制器1种模式的变革)
//Application
var app = angular.module('app',[]);
//Controller 1
app.controller('first', ['$scope', 'language', function($scope, language){
\t $scope.language = language.store;
setTimeout(function(){
console.log($scope.language.title); //My application
console.log(language.store.title); //Something something french
}, 1500);
}]);
//Language service
app.service('language', ['i18n', function(i18n){
\t return {
\t \t locale: 'en',
\t \t store: i18n['en'],
\t \t set: function(prop, val){
\t \t \t this[prop] = val;
\t \t \t this.store = i18n[this.locale];
\t \t }
\t }
}]);
//Factory - storing instead of an api temporarily
app.factory('i18n', [function(){
\t return {
\t \t en:{
\t \t \t title: 'My application'
\t \t },
\t \t fr:{
\t \t \t title: 'Something something french'
\t \t },
\t }
}]);
//Controller 2 - changing locale to fr which should update the instance store and so update the first scope
app.controller('second', ['$scope', 'language', function($scope, language){
language.set('locale', 'fr');
$scope.language = language.store;
}]);
<div ng-controller="first">
{{ language.title }}
<div ng-controller="second">
{{ language.title }}
</div>
</div>
答
您引用不同的store
对象:
set: function(prop, val){
this[prop] = val;
this.store = i18n[this.locale]; // this line sets language.store to the new object but Controller 1 is referencing the old one
}
查看更新捣鼓修复:http://jsfiddle.net/3c7ube0s/1/
谢谢你,我不知道我怎么错过了这个:)将在几分钟内接受时,其可用。 – 2014-10-27 09:48:41