Angular 核心概念

   2023-03-08 学习力0
核心提示:module(模块)作用通过模块对页面进行业务上的划分,根据不同的功能划分不同的模块。将重复使用的指令或者过滤器之类的代码做成模块,方便复用注意必须指定第二个参数,否则变成找到已经定义的模块请参照资料-备课代码-20-module.html理解语法语法: angular.

module(模块)

作用

  • 通过模块对页面进行业务上的划分,根据不同的功能划分不同的模块。
  • 将重复使用的指令或者过滤器之类的代码做成模块,方便复用
  • 注意必须指定第二个参数,否则变成找到已经定义的模块
    • 请参照资料-备课代码-20-module.html理解

语法

  • 语法: angular.module('模块名',[])
    • 第二个参数是个数组,这个数组里的每一个元素,是我们当前模块依赖的其他模块
    • 注意: 即便我们不依赖其他的模块,也需要传递一个空数组
      因为如是不传第二个参数的话,这个方法的作用就会变为获取一个名为"模块名"的模块对象
    • angular.module('myApp'),是获取一个名为myApp的模块对象。
    • 我们需要给ng-app指令一个属性值,这个值就是我们创建的模块名:
    • 告诉anuglar,现在由我们自己创建的这个模块来管理页面。

controller(控制器)

作用

  • 为应用中的模型设置初始状态
  • 通过$scope对象把数据模型或者函数行为暴露给视图
  • 监视模型的变化,做出相应的动作
    • 请参照资料-备课代码-24-watch.html理解

语法

  • 控制器是通过模块对象来创建的:
    • 语法:

      var app = angular.module('模块名',[])
      app.controller('控制器的名字',function($scope){
        // 在这个function里写我们具体想要执行的代码
        // $scope 就是用来存储我们的数据模型.
      })
      
    • 我们需要在页面上使用了数据模型的元素父级元素上加上ng-controller指令,并给这个指令一个属性值,这个值就是我们创建的控制器名字。

控制器的注入方式

普通的定义控制器

var myModule = angular.module('myModule', []);
myModule.controller('DemoController', function($scope) {
  $scope.user = {
    name: 'world1111'
  };
});

安全的定义控制器(推荐)

  • angular代码在压缩混淆的时候回被替换成特殊字符,这样就会产生找不到对象的问题
  • 请参照资料-备课代码-07-controller2.html理解
  • 代码混淆工具

面向对象的方式定义控制器(扩展)

  • 请参照资料-备课代码-09-oo-controller.html理解

MVC 思想

什么是 MVC 思想

  • 将应用程序的组成划分为三个部分:Model View Controller

    • 模型:数据处理
    • 视图:以友好的方式向用户展示数据
    • 控制器:业务逻辑处理
  • 控制器的作用就是初始化模型用的;

  • 模型就是用于存储数据的,做一些业务逻辑的操作。

  • 视图用于展现数据

  • 请参照资料-图片-03-富士康MVC类比图和04-MVC在代码中的应用理解

  • 请参照资料-备课代码-22-register.html理解

用MVC构建应用的优势

  • 剥离开视图和逻辑之间的关系,无论怎么修改dom操作都不用修改业务逻辑代码
  • 请参照资料-备课代码-23-calc2.html理解

MVC思想总结

  • 是一种设计思想,约定了程序的结构应该是怎样的,
  • 每一个组成原件都有一个明确的职责
  • 提高代码的结构和可维护性提高

双向数据绑定

  • 页面文本框的值改变,导致数据模型的值发生改变,
  • 数据模型的值的改变,反过来导致页面文本框的值的改变,这种相互影响的关系,我们起了个名词,叫作双向数据绑定。
  • ng-model = ""

$scope

  • 视图和控制器之间的数据桥梁
  • 用于在视图和控制器之间传递数据
  • 用来暴露数据模型(数据,行为)

ViewModel

  • $scope 实际上就是MVVM中所谓的VM(视图模型)
  • 正是因为$scope在Angular中大量使用甚至盖过了C(控制器)的概念,所以很多人(包括我)把Angular称之为MVVM框架,这一点倒是无所谓,具体看怎么用罢了
  • 大家必须掌握的就是如何根据一个原型抽象出对应的视图模型

表达式

类似于模版引擎的语法

作用:

使用表达式把数据绑定到 HTML。

语法:

  • 表达式写在双大括号内:{{ expression }}。
  • AngularJS 表达式很像 JavaScript 表达式
  • 它们可以包含文字、运算符和变量
  • 如 {{ 5 + 5 }} 或 {{ firstName + '-' + lastName }}
    • 请参照资料-备课代码-10-expression.html理解

支持的类型

  • 数字 {{ 100 + 100 }}
  • 字符串 {{ 'hello' + 'angular' }}
  • 对象 {{ zhangsan.name }}
  • 数组 {{ students[10] }}

与JS的比较:

相同点:

  • AngularJS 表达式可以包含字母,操作符,变量。

不同点:

  • AngularJS 表达式可以写在 HTML 中。
  • AngularJS 表达式不支持条件判断,循环及异常。
  • AngularJS 表达式支持过滤器。

指令

  • 在 AngularJS 中将前缀为 ng- 这种属性称之为指令,其作用就是为 DOM 元素调用方法、定义行为绑定数据等
  • 简单说:当一个 Angular 应用启动,Angular 就会遍历 DOM 树来解析 HTML,根据指令不同,完成不同操作

指令标准属性的问题

  • ng-xxx 的属性本身并不是HTML标准中定义的属性

  • 很多情况下语法校验是无法通过的,但是浏览器有容错性。

  • HTML5 允许扩展的(自制的)属性,以 data- 或者x- 开头。

  • 在 AngularJS 中可以使用 data-ng- 来让网页对 HTML5 有效。

  • ng-和data-ng-二者效果相同。

  • 请随便把example中的ng-app替换为data-ng-app理解

内置指令

ng-app

  • ng-app 指令用来标明一个 AngularJS 应用程序
  • 标记在一个 AngularJS 的作用范围的根对象上
  • 系统执行时会自动的执行根对象范围内的其他指令
  • 可以在同一个页面创建多个 ng-app 节点(不推荐)
  • 创建多个ng-app时,默认只能执行第一个,后面的需要手动引导:angular.bootstrap()
  • 标记的范围尽可能小,这样可以减少遍历的dom元素,主要为了性能
自动引导
  • 在angular中一个页面中只能有一个ng-app指令,这是单页面应用程序的入口,这属于自动引导
    • 请参照资料-备课代码-02-module.html理解
手动引导
  • 如果想在一个页面中使用多个ng-app指令,需要进行手动引导
  • 请参照资料-备课代码-03-mulit-module.html理解
多模块使用标准写法
  • 请参照资料-备课代码-04--module2.html理解
  • 请参照资料-图片-01--angular应用结构图理解

ng-model

  • 用于建立界面上的元素到数据模型属性的双向数据绑定
  • 一般情况绑定到元素的value属性上
  • 但是在checkbox之类的表单元素会有不同

ng-bind

  • ng-bind和表达式效果相同,不过能防止闪动一下页面
  • ng-bind上来是没有东西的,需要通过viewmodel或者ng-init初始化绑定的值
    • 请参照资料-备课代码-11-directive.html理解

ng-bind-html

  • 可以把字符串中的html在页面中直接展示
  • 不过在使用的时候会报不安全问题,缺少引用的文件,需要引用第三方的包才能实
    • 请参照资料-备课代码-11-directive.html理解
  • 现安全输出浏览器自动也会帮你处理一些安全问题的,不会执行或者输出不安全的代码,
    你在开发的过程中要有意识的考虑攻击问题,想一下输出的会不会是可执行的代码,需要编码后再呈现。
    • 请参照资料-备课代码-12-html-safe.html理解安全问题

ng-repeat

  • 循环输出页面内容
    • 请参照资料-备课代码-13-userful-directive.html理解
  • 数据源是数组
     var data = [
       /* beautify ignore:start */
       { id: 1, name: '詹三1', age: 118, gender: true },
       { id: 2, name: '詹三2', age: 128, gender: true },
       { id: 3, name: '詹三3', age: 138, gender: true },
       { id: 4, name: '詹三4', age: 148, gender: true },
       { id: 5, name: '詹三5', age: 158, gender: true },
       /* beautify ignore:end */
     ];
  <ul ng-controller="MainController">
    <li ng-repeat="item in data">
      <p>
        <span>{{item.id}}</span>
        <span>{{item.name}}</span>
        <span>{{item.age}}</span>
      </p>
    </li>
  </ul>
  • 数据源是对象
   var data = {
      /* beautify ignore:start */
      1: { name: '詹三1', age: 11, gender: true },
      2: { name: '詹三2', age: 12, gender: true },
      3: { name: '詹三3', age: 13, gender: true },
      4: { name: '詹三4', age: 14, gender: true },
      5: { name: '詹三5', age: 15, gender: true },
      /* beautify ignore:end */
    };
  <ul ng-controller="MainController">
    <li ng-repeat="(id, item) in ps track by $index">
      <p>
        <span>{{id}}</span>
        <span>{{item.name}}</span>
        <span>{{item.age}}</span>
      </p>
    </li>
  </ul>
  • $index
    • ng-repeat中的索引

ng-class

  • 决定某个样式是否添加
  • ng-class={classname1:是否添加,classname2:是否添加}
    • 请参照资料-备课代码-14-ng-class.html理解

$apply

  • 异步操作中的数据绑定不能及时监听到,让页面渲染,所以需要手动调用一下
    • 请参照资料-备课代码-15-loading.html理解

ng-cloak

  • 自动给页面元素添加dispaly:none属性,当页面渲染完毕自动删除
  • 最后你会发现直接把angularjs引用到最上面就不会有闪屏现象了,因为angularjs在页面渲染的时候已经执行了
    • 请参照资料-备课代码-16-ng-cloak.html理解

ng-show/ng-hide/ng-if

  • ng-show和ng-hide是控制页面是否显示
  • ng-if的作用是控制是否存在这个dom元素,如果值等于false会把页面中的元素注释
    • 请参照资料-备课代码-17-if-show-hide.html理解

ng-switch

  • 根据value值决定页面中的哪部分显示
    • 请参照资料-备课代码-17-if-show-hide.html理解

ng-src

  • 用于解决当链接类型数据绑定时候造成的加载问题
  • ng-src指令会自动帮你把属性值赋值给src属性,类似于懒加载中的效果一样
    • 请参照资料-备课代码-18-ng-src-ng-href.html理解

其他常用指令

  • ng-checked:
    • 单选/复选是否选中,只是单向绑定数据
    • 请参照资料-备课代码-19-ng-checked.html理解
  • ng-selected:
    • 是否选中,只是单向绑定数据
  • ng-disabled:
    • 是否禁用
  • ng-readonly:
    • 是否只读

常用事件指令

不同于以上的功能性指令,Angular还定义了一些用于和事件绑定的指令:

  • ng-blur:
    • 失去焦点
  • ng-change:
    • 发生改变
  • ng-copy:
    • 拷贝完成
  • ng-click:
    • 单击
  • ng-dblclick:
    • 双击
  • ng-focus:
    • 得到焦点
  • ng-blur:
    • 失去焦点
  • ng-submit:
    • 表单提交

第三方指令

  • 网址:angular-ui.github.io
 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • Angular.js的作用域和数据绑定
    初识Angular.js通过初识Angular.js可以做一个简单的入门,下面开始做深入的了解吧。作用域作用域($scope)和应用的数据模型相关联的,同时作用域也是表达式执行的上下文。$scope对象是定义应用业务逻辑、控制器方法和视图属性的地方。 作用域是视图和控制器
    03-16
  • Angular 4 设置组件样式的几种方式
    Angular 4 设置组件样式的几种方式
      你用Angular吗?一.介绍  如何只改动最简单的css代码,呈现完全不一样的视图效果。第一种:最基本的设置:  图1 代码 图2 界面运行效果图平常,想给一个label或者p等标签添加样式,我们就是这样操作,在Angular中也是一样的。现在,如果我想要将字体换
    03-16
  • angularJSapi学习-angular.copy使用
    angular.copy使用效果:初始状态:输入信息后未保存状态:点击save后状态:当输入框内容和master内容不一致时:点击reset使得user的信息被重置为master中信息: 具体代码: 1 !DOCTYPE HTML 2 html ng-app="app" 3 headscript src="./angular.min.js"/script
    03-16
  • Ionic启动时提示:The Angular CLI requires a minimum Node.js version of eithor v10.13 or v12.0
    Ionic启动时提示:The Angular CLI requires a m
    在新建ionic项目后通过ionic serve 启动ionic项目时提示:The Angular CLI requires a minimum Node.js version of eithor v10.13 or v12.0  注:博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号霸道的程序猿获取编程相关电子书、教程推送与
    03-16
  • Angular.js之内置过滤器学习笔记 javascript过
    !DOCTYPE htmlhtml lang="en"headmeta charset="UTF-8"titleangularFilter/titlescript src="http://cdn.bootcss.com/angular.js/1.4.6/angular.js"/script/head  body ng-app="angularJS" ng-controller="ctrl"    div{{
    03-08
  • Angular 隨記
    Windows下更新Node 和NPM方法管理員模式打開powershell執行以下命令:Set-ExecutionPolicy Unrestricted -Scope CurrentUser -Forcenpm install -g npm-windows-upgradenpm-windows-upgrade
    03-08
  • 双向数据绑定(angular,vue) 双向数据绑定指令
    最近github上插件项目更新了关于双向数据绑定的实现方式,关于angular和vue.angular众所周知是使用的脏检查($dirty)。一开始大家会认为angular开启了类似setInterval去不停的循环检查,性能极差,但其实并不是,$dirty是在一定条件下才会去执行,比如输入框
    03-08
  • 六、angular 生成二维码
    六、angular 生成二维码
    首先需要安装angular-qrcode :bower install monospaced/angular-qrcodenpm install angular-qrcode如何使用?在相应的需要使用二维码的页面增加如下代码:注意:这里的“version”和"size"可以根据github上面找出自己想要的结果:生成含有图片的二维码:这里
    03-08
  • angular.js简单入门。 angular入门教程
    angular.js简单入门。 angular入门教程
    小弟刚接触angular js  就写了一个简单的入门。后续慢慢补。。。首先看 html 页面。htmlmeta charset="UTF-8"headtitleangularJS/title/headscript type="text/javascript" src="./js/angular.min.js"/script      //引入 angularJSscript type="text/
    03-08
点击排行