• 简话Angular 02 Angular控制器-作用域嵌套


    一句话: 就是孩子可以啃老,老子不能动孩子一根毛!

    * 子控制器有父控制器里变量的所有权限,可以读取,也可以修改.

    * 父控制器不能读,也不能修改孩子的变量

    1. html代码

    <div ng-controller="ParentController">
        <h3><strong>父控制器</strong></h3>
        <label>姓名: </label> <input type="text" ng-model='person.name'>
        <label>年龄: </label> {{person.age}}
        <label>职业: </label> {{person.career}}
        <label>出生地: </label> {{child.birth}}
        <br><label>工作: </label> <input type="text" ng-model="job">
    
        <div ng-controller="ChildController">
            <h3><strong>子控制器</strong></h3>
            <label>年龄: </label> <input type="text" ng-model='person.age'>
            <label>姓名: </label> {{person.name}}
            <label>职业: </label> <input type="text" ng-model='person.career'>
            <label>出生地: </label> <input type="text" ng-model='child.birth'> 
            <button ng-click="updateBirth()">更新出生地</button>
            <br><label>工作: </label> <input type="text" ng-model="job">
        </div>
    </div>

    2. Javascript代码

    <script>
        var  myApp = angular.module('myApp', []);
        myApp.controller('ParentController', function($scope) {
            $scope.person = {name: '李三', age: 15};
    
        });
    
        myApp.controller('ChildController', function($scope) {
            $scope.child = {};
    
            $scope.updateBirth = function() {
                $scope.child.birth = "苏州";
            }
        });
    </script>

    3. 源码和查看效果

    1) 查看效果: http://jimuyouyou.github.io/angular-bootstrap-rest-seed/examples/angular/2-controller-scope.html

    2)源代码: https://github.com/jimuyouyou/angular-bootstrap-rest-seed

    3. 解释

    一句话: 就是孩子可以啃老,老子不能动孩子一根毛!

     

    1. 父控制器-打开页面就显示姓名, 说明$scope变量值更新了,页面会自动响应

    2. 子控制器-打开页面就显示姓名, 说明嵌套控制器也嵌套上下文,子scope可以使用所有父scope的变量(因为儿子里没有person的定义)

    3. 修改子控制器的年龄,父控制器年龄也更新, 说明子scope可以改变父scope里边变量的值

    4. 修改子控制器的出生地,父控制器没有更新的,说明子scope的变量,父scope无权读取和修改(因为child.birth只在子scope里边)

    5. 点击更新出生地,出生地值变化,说明$scope也可以更新html元素值,就是双向绑定

    6. 父控制器里输入工作,子控制器跟着显示,说明父子同名变量时,孩子如果为空,可以从父亲那里取-啃老

    7. 子控制器时输入工作,父控制器不更新的,说明父子同名变量时,孩子如果有值了,老子拿不到-啃老不敬老

    4. 全部源码

    <!DOCTYPE html>
    <html ng-app='myApp'>
    <head>
        <meta charset="UTF-8">
        <title>2-controller-scope.html</title>
        <link rel='stylesheet' href='../../libs/bootstrap3.1.1/css/bootstrap.min.css' />
        <script src='../../libs/angular1.3.13/angular.js'></script>
    </head>
    <body class="container">
    
    <div ng-controller="ParentController">
        <h3><strong>父控制器</strong></h3>
        <label>姓名: </label> <input type="text" ng-model='person.name'>
        <label>年龄: </label> {{person.age}}
        <label>职业: </label> {{person.career}}
        <label>出生地: </label> {{child.birth}}
        <br><label>工作: </label> <input type="text" ng-model="job">
    
        <div ng-controller="ChildController">
            <h3><strong>子控制器</strong></h3>
            <label>年龄: </label> <input type="text" ng-model='person.age'>
            <label>姓名: </label> {{person.name}}
            <label>职业: </label> <input type="text" ng-model='person.career'>
            <label>出生地: </label> <input type="text" ng-model='child.birth'> 
            <button ng-click="updateBirth()">更新出生地</button>
            <br><label>工作: </label> <input type="text" ng-model="job">
        </div>
    </div>    
    
    <br><br>
    <div class="bg-info">
        <label>
            * 子控制器有父控制器里变量的所有权限,可以读取,也可以修改.     <p></p>
            * 父控制器不能读,也不能修改孩子的变量<p></p>
            * <span class="bg-danger">就是孩子可以啃老,老子不能动孩子一根毛!</span>
        </label>
        <p></p>
        1. 父控制器-打开页面就显示姓名, 说明$scope变量值更新了,页面会自动响应 <p></p>
        2. 子控制器-打开页面就显示姓名, 说明嵌套控制器也嵌套上下文,子scope可以使用所有父scope的变量(因为儿子里没有person的定义) <p></p>
        3. 修改子控制器的年龄,父控制器年龄也更新, 说明子scope可以改变父scope里边变量的值<p></p>
        4. 修改子控制器的出生地,父控制器没有更新的,说明子scope的变量,父scope无权读取和修改(因为child.birth只在子scope里边) <p></p>
        5. 点击更新出生地,出生地值变化,说明$scope也可以更新html元素值,就是双向绑定<p></p>
        6. 父控制器里输入工作,子控制器跟着显示,说明父子同名变量时,孩子如果为空,可以从父亲那里取-啃老<p></p>
        7. 子控制器时输入工作,父控制器不更新的,说明父子同名变量时,孩子如果有值了,老子拿不到-啃老不敬老<p></p>
    </div>
    
    <script>
        var  myApp = angular.module('myApp', []);
        myApp.controller('ParentController', function($scope) {
            $scope.person = {name: '李三', age: 15};
    
        });
    
        myApp.controller('ChildController', function($scope) {
            $scope.child = {};
    
            $scope.updateBirth = function() {
                $scope.child.birth = "苏州";
            }
        });
    </script>
        
    </body>
    </html>
  • 相关阅读:
    线上一次大量 CLOSE_WAIT 复盘
    etcd 性能优化实践
    Web 前端密码加密是否有意义?
    tmp
    京东 PC 首页 2019 改版前端总结 原创: 何Jason,EC,小屁 凹凸实验室 今天
    http://stblog.baidu-tech.com/?p=1684) coredump调试记录
    Java字节码增强探秘
    dedecms 织梦更改rss的路径、网站地图sitemap的路径
    dedecms时间日期标签大全
    织梦CMS被挂马特征汇总
  • 原文地址:https://www.cnblogs.com/meteorcn/p/4660026.html
Copyright © 2020-2023  润新知