【发布时间】:2014-05-29 12:54:43
【问题描述】:
正如我在 stackoverflow 上发现的,在 Angular 控制器之间进行通信的正确方法是使用服务。这里很少有主题可以演示如何使用 $scope 来实现。但是,如果我使用“controller as”语法而不使用 $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/
附: 我也想使用 $watch 来通知更新,但就我现在而言,我只能从 $scope 使用它,而不能使用“this”?
【问题讨论】:
-
在您的服务中,尝试返回对象 - 您的服务需要提供“服务”。在您的情况下,您所做的只是初始化服务,而不是从中返回任何内容
-
嗯,我在这里和网上看到的很多例子都没有返回服务中的任何内容,只在工厂中返回,例如这里:stackoverflow.com/questions/16565105/…
标签: javascript angularjs