Angular Concept

AngularJS 应用架构,单页面应用,

html元素包含AngularJS应用(ng-app=)

html页面元素定义了 控制器的作用域(ng-controller=),

一个应用可以有多个控制器 AngularJS在HTML DOMContentLoaded事件中自动开始, 如果找到ng-app指令,AngularJS载入指令中的模块,并将ng-app 作为应用的根进行编译。 应用的根可以是整个页面,或者页面的一小部分(更快的编译,执行)

ng-model指令绑定了 textarea 到控制器变量message.

ng-click事件调用了控制器函数 clear() ng-bind指令绑定控制器函数 到 元素

Dependency Injection 一个或更多的依赖(或服务)被注入(或通过引用传递)到一个独立的对象(客户端)中,然后成为该客户端状态的一部分。

该模式分离了客户端依赖本身行为的创建,这使得程序设计变得松耦合,并遵循依赖反转和单一职责原则。 与服务定位模式形成直接对比的是,它允许客户端了解客户端如何使用该系统找到依赖。

HTML attribute , DOM property

要理解Angular绑定如何工作,重点是搞清HTML Attribute和Dom property之间的区别 attribute defined by HTML, property defined by DOM(Document object model)

  • few html attribute have mapping to property, example: id.
  • some html attribute did not have related property, example: colspan.
  • some dom property did not have related attribute, example: textContent.
  • most of HTML attribute seems have mapping to property, but not what you think.

Take care:

  • attribute init Dom property, and property'value can be changed, but attribute'value cannot.
  • HTML'value , The initial value is specified via attribute, DOM'value, is property' current value.

Angular的模板绑定是通过property和事件来工作的,而不是attribute(它的唯一作用是用来初始化元素和指令的状态).

绑定目标

数据绑定的目标是DOM中的某些东西,这个目标可以是元素,组件,指令的 property/event等。

绑定类型: property, event, 双向,attribute(例外情况), css

  • property binding: 当要把视图元素的属性设置为模板表达式时,就需要把元素属性设置为组件属性的值。 设置指令的属性 设置自定义组件的模型属性(这是父子组件之间通讯的重要途径)

把属性绑定描述成单向数据绑定,因为值的流动是单向的,从组件的数据属性流动到目标元素的属性。

不能使用属性绑定来从目标元素拉取值,也不能绑定到目标元素的属性来读取它。只能设置它。

JavaScript module vs. NgModule

  • JavaScript的模块是内含javascript代码的独立文件,可以为代码加上命名空间,防止全局变量污染。

    写一个导出语句,外界即可调用

      export class AppComponent{...}
    

    在其他文件需要这个文件时,写一个导入语句即可,

      import{AppComponent } from './app.component'
    
  • NgModule 是带有@NgModule装饰器的类. @NgModule 装饰器的 imports 数组会告诉 Angular 哪些其它的 NgModule 是当前模块所需的。

      @NgModule({
          declarations:[],
          imports:[],
          providers:[],
          bootstrap:[]
      })
    

    NgModule关键性不同点

  • 只绑定了可声明类,只供Angular编译器用。
  • 模块的类需要列在其@NgModule.declarations列表中
  • 只能导出可声明类
  • 可以通过把服务提供商加到@NgModule.providers列表中,用这些服务来扩展整个应用

引导启动

results matching ""

    No results matching ""