详解angularjs 学习之 scope作用域
简介
Scope(作用域)是应用在HTML(视图)和JavaScript(控制器)之间的纽带。
Scope是一个存储应用数据模型的对象,有可用的方法和属性。
Scope可应用在视图和控制器上。
作用域是Web应用的控制器和视图之间的粘结剂:
控制器-->作用域-->视图(DOM)
指令-->作用域-->视图(DOM)
当你在AngularJS创建控制器时,你可以将$scope对象当作一个参数传递:
{{name}}
输出结果:天下行走
控制器中创建一个属性名"name",对应了视图中使用{{}}中的名称。
当在控制器中添加$scope对象时,视图(HTML)可以获取了这些属性。
视图中,你不需要添加$scope前缀,只需要添加属性名即可,如:{{name}}。
AngularJS应用组成如下:
View(视图),即HTML。
Model(模型),当前视图中可用的数据。
Controller(控制器),即JavaScript函数,可以添加或修改属性。
scope是一个JavaScript对象,带有属性和方法,这些属性和方法可以在视图和控制器中使用。
再来看个例子:
输入你的名字: {{greeting}}
greet
在这个例子中,
- 控制器:MyCtrl,它引用了$scope并在其上注册了两个属性和一个方法
- $scope对象:持有上面例子所需的数据模型,包括name属性、greeting属性(注:这是在sayHello()方法被调用时注册的)和sayHello()方法
- 视图:拥有一个输入框、一个按钮以及一个利用双向绑定来显示数据的内容块
那么具体整个示例有这样两个流程,从控制器发起的角度来看就是:
1、控制器往作用域中写属性:
给作用域中的name赋值,然后作用域通知视图中的input数据变化了,input因为通过ng-model实现了双向绑定可以知道name的变化,进而在视图中渲染出改变的值
2、控制器往作用域中写方法
给作用域中的sayHello()方法赋值,该方法被视图中的button调用,因为button通过ng-click绑定了该方法,当用户点击按钮时,sayHello()被调用,这个方法读取作用域中的name属性,加上后缀字符串,然后赋值给在作用域中新创建的greeting属性
整个示例的过程如果从视图的角度看,那主要是以下三个部分:
1、input中的渲染逻辑:展示了通过ng-model进行的作用域和视图中某表单元素的双向绑定
- 根据ng-model中的name去作用域中取,如果已经有值,那么用这个默认值填充当前的输入框
- 接受用户输入,并且将用户输入的字符串传给name,这时候作用域中的该属性值实时更新为用户输入的值
2、button中的逻辑
接受用户单击,调用作用域中的sayHello()方法
3、{{greeting}}的渲染逻辑
- 初始阶段:在用户未单击按钮时,不显示内容
- 取值阶段:在用户单击后,这个表达式会去scope中取greeting属性,而本例中这个作用域和控制器是同一个的,这时候,该作用域下greeting属性已经有了,这时候这个属性就被取回来了
- 计算阶段:在当前作用域下去计算greeting表达式,然后渲染视图,显示张三是个笨蛋!
经过以上的两种角度分析示例过程,我们可以知道:作用域(scope)对象以及其属性是视图渲染的唯一数据来源。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。