AngularUI之Modal的子作用域研究

我们知道通过AngularUI打开模态对话框的方法是 uibModal.open();openkeyscopescope: scope。则模态对话框继承了父作用。
下面我们来讲子scope继承父scope的原理:总的来说只有一句话,子作用域对父作用域的继承,变量相当于值传递,对象和数组是引用传递。
也就是说,我们在子作用域中可以访问和修改父作用域中的基本数据类型的变量,但是这种修改对于父作用域是不可见的。子作用域也可以对父作用域中的对象进行访问和修改,且这种修改对于父作用域是可见的,因为它是引用传递。
下面的代码是我自己求证的一个例子,供参考:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>modal</title>
    <script src="js/angular.min.js" type="text/javascript"></script>
    <script src="js/angular-animate.min.js" type="text/javascript"></script>
    <script src="js/ui-bootstrap-tpls-2.1.4.js" type="text/javascript"></script>
    <link href="css/bootstrap.css" rel="stylesheet">
</head>
<body  ng-app="myApp">
    <div ng-controller="myController">
        父变量:{{parentVal}}
        父对象:{{parent.val}}
        <button ng-click="openModal()">Open Modal</button>
    </div>
    <script>
        var app = angular.module("myApp",["ui.bootstrap"]);
        app.controller("myController",function($scope,$uibModal){
            $scope.parentVal = "value form controller";
            $scope.parent = {};
            $scope.parent.val = "parentObj val";
            $scope.openModal = function(){
                var modalInstance = $uibModal.open({
                    templateUrl: "modal.html",
                    controller: ModalController,
                    scope: $scope,
                    size: "lg"
                });
            };
            var ModalController = function($scope){
                $scope.changeParentVal = function(){
                    $scope.parentVal = "value from modal";
                    $scope.parent.val = "object val from modal";
                }
            };
        });
    </script>
</body>
</html>
<script type="text/ng-template" id="modal.html">
    <div>
        <h1>This is the Modal</h1>
        从父作用继承的变量:{{parentVal}}
        从父作用域继承的对象的值: {{parent.val}}
        <button ng-click="changeParentVal()">Change Parent Value</button>
    </div>
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值