javascript - AngularJS:如何在 Controller 之间传递变量?

标签 javascript angularjs angularjs-controller

我有两个 Angular Controller :

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

同样失败。

注意:这些 Controller 没有相互嵌套。

最佳答案

在多个 Controller 之间共享变量的一种方法是create a service并将其注入(inject)您想要使用它的任何 Controller 中。

简单服务示例:

angular.module('myApp', [])
    .service('sharedProperties', function () {
        var property = 'First';

        return {
            getProperty: function () {
                return property;
            },
            setProperty: function(value) {
                property = value;
            }
        };
    });

在 Controller 中使用服务:

function Ctrl2($scope, sharedProperties) {
    $scope.prop2 = "Second";
    $scope.both = sharedProperties.getProperty() + $scope.prop2;
}

这在 this blog 中有很好的描述(尤其是第 2 课及以上)。

我发现,如果您想跨多个 Controller 绑定(bind)到这些属性,最好绑定(bind)到对象的属性而不是原始类型( bool 、字符串、数字)以保留绑定(bind)的引用。

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


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

  • 绑定(bind)到共享值的静态副本(在 myController1 中)
    • 绑定(bind)到原语(字符串)
    • 绑定(bind)到对象的属性(保存到范围变量)
  • 绑定(bind)到更新 UI 的共享值(在 myController2 中)
    • 绑定(bind)到返回原语(字符串)的函数
    • 绑定(bind)到对象的属性
    • 双向绑定(bind)到对象的属性

关于javascript - AngularJS:如何在 Controller 之间传递变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12008908/

相关文章:

javascript - 使用递归组合字母

javascript - 为什么我不能消除这个箭头函数?

javascript - 如何从外部范围解析和分配内部 Controller ?

javascript - 使用 AngularJs 加载图像

javascript - net::ERR_NAME_NOT_RESOLVED 由于尝试从 HTML5 客户端使用 Web api

javascript - 如何使用 Typescript + react-leaflet 创建 GeoJSON Feature 元素

angularjs - 将旧站点移动到 AngularJS 时管理 301 重定向

javascript - 观察指令 Angularjs 中的屏幕尺寸变化

javascript - 在 Angularjs 中按对象属性过滤

javascript - 定义 Angular Controller 和组件