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
}

我不能在Ctrl2内使用Ctrl1,因为它是未定义的。但是,如果我试图通过它像这样…

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();

也失败。

注意:这些控制器没有嵌套在一起。

跨多个控制器共享变量的一种方法create a service,并将其注入任何控制器,您要使用它。

简单服务示例:

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;
}

这在this blog(第2课和特别是)中描述得很好。

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

示例:var property = {Property1:’First’};而不是var property =’First’;.

更新:(希望)使事情更清楚here is a fiddle显示一个例子:

>绑定到共享值的静态副本(在myController1中)

>绑定到一个基元(string)
>绑定到对象的属性(保存到作用域变量)

>绑定到共享的值,更新UI的值更新(在myController2中)

>绑定到返回基元(string)的函数>绑定到对象的属性>双向绑定到对象的属性

相关文章

ANGULAR.JS:NG-SELECTANDNG-OPTIONSPS:其实看英文文档比看中...
AngularJS中使用Chart.js制折线图与饼图实例  Chart.js 是...
IE浏览器兼容性后续前言 继续尝试解决IE浏览器兼容性问题,...
Angular实现下拉菜单多选写这篇文章时,引用文章地址如下:h...
在AngularJS应用中集成科大讯飞语音输入功能前言 根据项目...
Angular数据更新不及时问题探讨前言 在修复控制角标正确变...