angularjs控制器间传值的五种方案

控制器间传值

1. 父作用域向子作用域传值

- broadcasted :从父级作用域广播至子级 scope
- $on()捕获事件
<button ng-click="$broadcast('MyEvent')">$broadcast('MyEvent')</button>

2. 子作用域向父作用域传值

- emitted :从子级作用域往上发射到父级作用域(相当于冒泡)
- $on()捕获事件
<button ng-click="$emit('MyEvent')">$emit('MyEvent')</button>

3.- 平级作用域resolve传值

- 使用resolve传值,传递的是一个对象
- 获取时需要将传递的对象的名注入后使用
resolve: {
    academicInfo: function () {
        if (type === 'add') {
            return null
        } else if (type === 'edit') {
            return academic
        }
    }
}

4. 使用根作用域($rootscope)

- $rootscope相当于一个全局变量,在同一个angular.module("exampleApp")下可用
- $rootscope需要注入到控制器后再使用

5. 使用service服务

- 在同一个module下,不同的控制器可以访问同一个service服务
- 通过service服务里值的存储传递可实现控制器传值

完整demo:

<!DOCTYPE html>
<html ng-app="exampleApp">
<head>
    <title>Controllers</title>
    <script src="http://cdn.static.runoob.com/libs/angular.js/1.4.6/angular.min.js"></script>
    <link href="http://cdn.static.runoob.com/libs/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
    <script>
        angular.module("exampleApp", [])
            .service("ZipCodes", function($rootScope) {
                return {
                    setZipCode: function(type, zip) {
                        this[type] = zip;
                        $rootScope.$broadcast("zipCodeUpdated", {
                            type: type, zipCode: zip 
                        });
                    }
                }
            })
            .controller("simpleCtrl", function ($scope, ZipCodes) {

                $scope.$on("zipCodeUpdated", function (event, args) {
                    $scope[args.type] = args.zipCode;
                });

                $scope.setAddress = function (type, zip) {
                    ZipCodes.setZipCode(type, zip);
                    console.log("Type: " + type + " " + zip);
                }

                $scope.copyAddress = function () {
                    $scope.zip = $scope.billingZip;
                }
            });
    </script>

</head>
<body>
    <div class="well" ng-controller="simpleCtrl">
        <h4>Billing Zip Code</h4>
        <div class="form-group">
            <input class="form-control" ng-model="zip">
        </div>
        <button class="btn btn-primary" ng-click="setAddress('billingZip', zip)">
            Save Billing
        </button>
    </div>
    <div class="well" ng-controller="simpleCtrl">
        <h4>Shipping Zip Code</h4>
        <div class="form-group">
            <input class="form-control" ng-model="zip">
        </div>
        <button class="btn btn-primary" ng-click="copyAddress()">
            Use Billing
        </button>
        <button class="btn btn-primary" ng-click="setAddress('shippingZip', zip)">
            Save Shipping
        </button>
    </div>
</body>
</html>

以上五种angularjs控制器传值方案在工作中应该是够用啦,恩,点个赞呗:)

END

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值