控制器之间的通信使用"控制器作为"句法

时间:2014-05-29 12:54:44

标签: javascript angularjs

正如我在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;?

1 个答案:

答案 0 :(得分:0)

如callmekatootie所说,你需要在服务中退回一些东西,但你也不需要破坏模型的引用

 this.name = myService1.newName

这会创建一个链接betwin this.name和service.newName不是值而是实际对象

 this.service.newName = {'last': 'Ted'};

这会破坏另一个控制器链接到的对象并创建一个新的控制器,而另一个控制器不知道存在该对象。

解决方案非常简单,只需在此链接中发布

http://jsfiddle.net/vxQK7/1/