我有两个Angular控制器:
function Ctrl1($scope) { $scope.prop1 = "First"; } function Ctrl2($scope) { $scope.prop2 = "Second"; $scope.both = Ctrl1.prop1 + $scope.prop2; //This is what I would like to do ideally }
我无法使用Ctrl1内部,Ctrl2因为它是未定义的。但是,如果我尝试像这样传递它…
Ctrl1
Ctrl2
function Ctrl2($scope, Ctrl1) { $scope.prop2 = "Second"; $scope.both = Ctrl1.prop1 + $scope.prop2; //This is what I would like to do ideally }
我得到一个错误。有谁知道如何做到这一点?
在做
Ctrl2.prototype = new Ctrl1();
也失败。
注意: 这些控制器彼此之间不嵌套。
在多个控制器之间共享变量的一种方法是创建服务并将其注入到要使用它的任何控制器中。
简单服务示例:
angular.module('myApp', []) .service('sharedProperties', function () { var property = 'First'; return { getProperty: function () { return property; }, setProperty: function(value) { property = value; } }; });
在控制器中使用服务:
function Ctrl2($scope, sharedProperties) { $scope.prop2 = "Second"; $scope.both = sharedProperties.getProperty() + $scope.prop2; }
这个博客对此进行了很好的描述(特别是第2课)。
我发现,如果要跨多个控制器绑定到这些属性,则如果绑定到对象的属性而不是原始类型(布尔,字符串,数字)来保留绑定的引用,则效果更好。
示例:var property = { Property1: 'First' };代替var property = 'First';。
var property = { Property1: 'First' };
var property = 'First';
更新: 为了(希望)使事情变得更清楚,这是一个小提琴,其中显示了以下示例: