AngularJS:如何在控制器之间传递变量?

我有两个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因为它是未定义的。但是,如果我尝试像这样传递它…

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;

}

我发现,如果要跨多个控制器绑定到这些属性,则如果绑定到对象的属性而不是原始类型(布尔,字符串,数字)来保留绑定的引用,则效果更好。

示例:var property = { Property1: 'First' };代替var property = 'First';


为了(希望)使事情变得更清楚,here is a fiddle ,其中显示了以下示例:

    • 绑定到原语(字符串)
    • 绑定到对象的属性(保存到范围变量)

    • 绑定到返回原语(字符串)的函数
    • 绑定到对象的属性
    • 双向绑定到对象的属性

以上是 AngularJS:如何在控制器之间传递变量? 的全部内容, 来源链接: utcz.com/qa/398972.html

回到顶部