正如我在stackoverflow上发现的那样,在角度控制器之间进行通信的正确方法是使用服务。这里的主题很少,演示如何使用$ scope来实现。但是,如果我使用"控制器作为"这种方法(使用服务)对我不起作用。语法,没有$ scope。 这是我的例子:
HTML
<div ng-app="myapp">
<div ng-controller="PersonCtrl as person">
<p>{{ person.name['last'] }}</p>
</div>
<div ng-controller="PersonCtrl2 as person2">
Change name <button type="button" ng-click="person2.changeName()"> To Ted</button>
</div>
</div>
JS
var myapp = angular.module('myapp', []);
myapp.controller('PersonCtrl', function (myService1) {
this.name = myService1.newName;
});
myapp.service('myService1', function() {
this.newName = {'last': 'Bob'};
});
var PersonCtrl2 = function(myService1) {
this.service = myService1;
};
PersonCtrl2.prototype.changeName = function() {
alert('a');
this.service.newName = {'last': 'Ted'};
};
myapp.controller('PersonCtrl2', PersonCtrl2);
小提琴 http://jsfiddle.net/vxQK7/
P.S。 我还想使用$ watch进行更新通知,但就我而言,我只能使用$ scope而不是使用&#34;这&#34;?
答案 0 :(得分:0)
如callmekatootie所说,你需要在服务中退回一些东西,但你也不需要破坏模型的引用
this.name = myService1.newName
这会创建一个链接betwin this.name和service.newName不是值而是实际对象
this.service.newName = {'last': 'Ted'};
这会破坏另一个控制器链接到的对象并创建一个新的控制器,而另一个控制器不知道存在该对象。
解决方案非常简单,只需在此链接中发布