我有两个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();

也失败了.

NOTE:这些控制器彼此之间没有嵌套.

推荐答案

在多个控制器之间共享变量的一种方法是将变量设置为create a service,并将其注入到您想要使用它的任何控制器中.

Simple service example:

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

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

Using the service in a controller:

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

这在第this blog课(特别是第2课和更多)中描述得非常好.

我发现,如果您想跨多个控制器绑定到这些属性,那么绑定到对象的属性而不是基元类型(Boolean、String、Number)来保留绑定的引用效果会更好.

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


UPDATE:(希望)让事情变得更清楚here is a fiddle展示了一个例子:

  • Binding to static copies of the shared value (in myController1)
    • 绑定到基元(字符串)
    • 绑定到对象的属性(保存到作用域变量)
  • Binding to shared values that update the UI as the values are updated (in myController2)
    • 绑定到返回基元(字符串)的函数
    • 绑定到对象的属性
    • 双向绑定到对象的属性

Javascript相关问答推荐

单击树元素时阻止焦点事件触发?

Node.JS ws包中是否有Webocket的错误代码列表?

vue3类型脚本中可能未定义对象''

如何在dataTables PDF输出中正确渲染字形?

在时间轴完整日历中显示日期标题

未捕获错误:在注销后重定向到/login页面时找不到匹配的路由

Redux查询多个数据库Api reducerPath&

将现场录音发送到后端

将本机导航路由react 到导航栏中未列出的屏幕?

如何从调整大小/zoom 的SVG路径定义新的d属性?""

从Node JS将对象数组中的数据插入Postgres表

引用在HTMLAttributes<;HTMLDivElement>;中不可用

屏幕右侧屏障上的产卵点""

Regex结果包含额外的match/group,只带一个返回

Next.js服务器端组件请求,如何发送我的cookie token?

如何创建返回不带`new`关键字的实例的类

以编程方式聚焦的链接将被聚焦,但样式不适用

WebSocketException:远程方在未完成关闭握手的情况下关闭了WebSocket连接.&#三十九岁;

如何让SVG图标在被点击和访问后改变 colored颜色 ,并在被访问后取消点击时恢复到原来的 colored颜色 ?

P5.js中矩形内的圆弧