为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

AngularJS:如何在控制器之间传递变量?我有两个角度控制器: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();也失败了。注:这些控制器不是相互嵌套的。
查看完整描述

3 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

跨多个控制器共享变量的一种方法是创建服务并将其注入任何你想要使用的控制器中。

简单服务示例:

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';.


最新情况:(希望)使事情更清楚这是一把小提琴它显示了以下方面的一个例子:

  • 绑定到共享值的静态副本(在myController 1中)

    • 绑定到原语(字符串)
    • 绑定到对象的属性(保存到范围变量)
  • 绑定到更新后更新UI的共享值(在myController 2中)

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


查看完整回答
反对 回复 2019-06-13
  • 3 回答
  • 0 关注
  • 665 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信