简话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>
时间: 2024-10-26 03:30:16

简话Angular 02 Angular控制器-作用域嵌套的相关文章

简话Angular 01 为什么要学Angular

1. JQuery vs Javascipt 问两个问题: 1) 你用过JQuery吗?当然! 2) 感觉JQuery相对于原生纯Javascript优势在哪里? 我的答案:JQuery更直接方便,兼容性好,代码少,好理解,快速开发,Bug少…… 2. Angular vs JQuery 参照JQuery vs Javascript 3. Angular的前途怎么样 假如今天是2008年,有人问JQuery前途怎么样,你知道吗?现在你知道JQuery前途了吗? 4. Angular可以不学吗 不

简话Angular 01 初识Angular 数据绑定

1. Angular有哪些突出优点 1) MVC 基于Html-Javascript 2) 依赖注入 3) 数据双向绑定,响应式页面设计 4) 模块化,自定义指令 2. 简话数据绑定 1) 代码: 1 <input type="text" ng-model="hello1"> 2 3 <input type="text" ng-model="hello2"> 4 5 <textarea ng-bi

angular学习之控制器的交互

AngularJS中的controller是个函数,用来向视图的作用域($scope)添加额外的功能,我们用它来给作用域对象设置初始状态,并添加自定义行为. 当我们在创建新的控制器时,angularJS会帮我们生成并传递一个新的$scope对象给这个controller,在angularJS应用的中的任何一个部分,都有父级作用域的存在,顶级就是ng-app所在的层级,它的父级作用域就是$rootScope. 每个$scope的$root指向$rootScope, $cope.$parent指向父

02:名字、作用域和约束(Bindings)-[程序设计语言]-摘记&amp;注解

阅读导航 本系列其他文章目录请戳这里. 1.名字.约束时间(Binding Time) 2.对象生存期和存储管理 2.1静态分配 2.2基于栈的分配 2.2堆分配和垃圾收集 3.作用域规则 3.1静态作用域 3.2嵌套子程序 3.3动态作用域 4.引用环境的约束 4.1子程序闭包 4.2一级和二级子程序 5.作用域里的约束 1.名字.约束时间(Binding Time) 在本篇博文开始前先介绍两个约定:第一个是“对象”,除非在介绍面向对象语言时,本系列中出现的对象均是指任何可以有名字的东西,比如

angular.isArray,angular.isDate,angular.isDefined,angular.isElement,angular.isFunction,angular.isNumber,angular.isObject,angular.isString,angular.isUndefined

//angular.isArray是否是数组console.log(angular.isArray([])); //trueconsole.log(angular.isArray([1,2,1,3])); //true//angular.isDate是否是日期console.log(angular.isDate('2012-12-02')); //falseconsole.log(angular.isDate(new Date)); //true//angular.isDefined引用对象是否

简话Angular 07 Angular config-run-service-factory-provider-constant-value

一句话: 它们Angular框架声明周期的各个阶段,常规约定各专注于特定功能,经过处理也可以互相替换 1.功能细分简解 config Angular module模块的加载阶段-应用在此时还没有启动 run Angular应用是第一个被运行的方法,相当于其它语言中的main()方法 factory factory() 方法是创建和配置服务的最快捷方式,单例对象,在应用的生命周期内只会被调用一次注入factory,相当于注入factory定义时的函数调用入口.用 Factory 就是创建一个对象,

简话Angular 08 Angular ajax

一句话: 它们Angular框架声明周期的各个阶段,常规约定各专注于特定功能,经过处理也可以互相替换 1.功能细分简解 $http 类似JQuery ajax,支持promise $http.jsonp 跨域访问,只支持json数据格式,不支持文本,html等其他格式 $httpProvider 主要在config中使用,做http通用设置 1 <label>JSONP 实例, Http promise实例</label> 2 <div ng-controller="

简话Angular 03 Angular内置表达式大全

一句话: 大多数html标签属性和事件都有一个对应的ng指令 说明:这些指令和原生html最大的区别就是可以动态更新.比如一个div的样式用ng-class后,我们就可以随意应用css class. 1. 内置指令大全 ng-include 包含一个文件 ng-href ng-src 对应 href src ng-disabled ng-readonly 对应 disabled readonly ng-checked ng-selected ng-options ng-true-value ng

简话Angular 05 Angular表单验证

一句话: 可以使用所有html5表单验证功能,同时Angular还增强了部分验证,支持动态验证 1. 上源码 1 <div ng-controller="ExampleController"> 2 <form action="" name="exampleForm"> 3 <label>姓名(required ng-minlength=1 ng-maxlength=3): </label> <