前端MVC框架之 Angular

一、什么是Angular

  • jQuery,它属于一种类库(一系列函数的集合),以DOM为驱动核心;而Angular是一种 MVC 的前端框架,则是前端框架,以数据和逻辑为驱动核心,它有着诸多特性,最重要的是:模块化,双向数据绑定,语义化标签,依赖注入等。
  • MVC 开发模式:model(模型),view(视图),controller(控制器)。

    二、模块化

    最大程度实现代码复用
    定义应用
  • 为HTML标签添加 ng-app 属性,表明整个文档都是应用,也可指定标签添加,该标签包裹的所有内容都是应用的一部分(++注:没有关联相应模块,一定不能赋值;但如果关联相应模块,必须赋值++)

    定义模块
  • 提供一个全局对象Angular,用angular.module(参数1,参数2)方法定义模块,输出一个返回值。
  • 第一个参数:跟ng-app的值一致;
  • 第二个参数:数组。表明该模块依赖其他模块,依赖不存在则写 [ ];
    1122348-20170330235852414-474515766.png

定义控制器(view和model的桥梁)
  • 定义模块输出的返回值.controller(参数1,参数2)。
  • 第一个参数:控制器名称(++确定与view的关联++,在HTML标签添加ng-controller:控制器名称);
  • 第二个参数:为一个数组,除了最后一个单元是函数,其余都是字符串,该参数表明控制器的依赖关系。
    1122348-20170330235824883-658123542.png

三、指令

  • 常用内置指令

    1.ng-app 指定应用根元素,至少有一个元素指定了此属性。

    2.ng-controller 指定控制器

    3.ng-show 控制元素是否显示,true显示、false不显示(通过display:none/block来控制)

    4.ng-hide 控制元素是否隐藏,true隐藏、false不隐藏

    5.ng-if 控制元素是否“存在”,true存在、false不存在(与ng-show区别:当为false的时候,连同整个DOM节点都不存在)

    6.ng-src 增强图片路径

    7.ng-href增强地址

    8.ng-class 控制类名 (后面可接对象,如ng-class="{done: true}")

    9.ng-include 引入模板

    10.ng-disabled 表单禁用

    11.ng-readonly 表单只读

    12.ng-checked 单/复选框表单选中

    13.ng-selected 下拉框表单选中

  • 自定义指令
    • directive
      1122348-20170330235915820-2113106644.png

四、数据绑定

单向绑定
  • 只能是模型数据向视图传递(类似artTemplate模板引擎的工作方式)
  • 相关指令:
    • 通过 {{}} 或者 ng-bind 来实现模型数据向视图模板的绑定,模型数据由一个内置服务$scope提供,它是个空对象,通过为这个对象添加属性或方法,便可以在相应的视图模板里被访问。
    • 这里的 {{}} 是 ng-bind 的简写形式,区别在于通过 {{}} 绑定数据时会出现闪屏,添加添加 ng-cloak 也可以解决“闪烁”现象。

      双向绑定
  • 视图 -->传到 模型上 -->再传回视图
  • 相关指令:
    • ng-model
  • 举一个小例子:
    <body ng-app><input type="text" ng-model='mesg'><h1>{{mesg}}</h1>
</body>
初始化模型(既初始化$scope)
  • ng-init (很少用)。

    事件处理
  • 无需显式的获取DOM元素便可添加事件
  • 在原有事件前面添加前缀“ng”,然后以属性的形式添加到HTML便签中,例如:ng-click

    数据处理
  • 相关指令:
    • ng-repeat: 可以将数组或对象数据迭代到视图模板中
    • ng-switch 和 ng-switch-when 配合使用

      五、作用域

  • 每个controller下的$scope产生不同的作用域
  • 根作用域:ng-app所在的标签内

    六、过滤器

  • 内置过滤器
    • currency[货币] 将数值格式化为货币格式
    • date 日期格式化,年(y)、月(M)、日(d)、星期(EEEE/EEE)、时(H/h)、分(m)、秒(s)、毫秒(.sss),也可以组合到一起使用。
    • filter 在给定数组中选择满足条件的一个子集,并返回一个新数组,其条件可以是一个字符串、对象、函数
    • json 将Javascrip对象转成JSON字符串。
    • limitTo 取出字符串或数组的前(正数)几位或后(负数)几位
    • lowercase 将文本转换成小写格式
    • uppercase 将文本转换成大写格式
    • number 数字格式化,可控制小位位数
    • orderBy 对数组进行排序,第2个参数是布尔值可控制方向(正序或倒序)
  • 自定义过滤器
    • 通过模块对象实例提供的filter方法自定义过滤器
  • 总结
    • 竖线调用,冒号传值。

      七、依赖注入

  • 通过注入的方式解决依赖问题,通过回调函数的参数来实现。
  • 常见AngularJS内置服务:$http、$http、$location、$timeout、$rootScope
  • 分类:
    • 行类式
    • 推断式(不建议使用,代码压缩后,参数无法找到,无法找到依赖)

      八、服务

  • 内置服务
    • $Timeout 和 $interval与原生JS区别,不需要每次手动开启脏值检查,即$scope.$digest()
    • 是对原生JS的封装
    • 常见内置服务:
      • $http 向服务器端发起异步请求(注意前后端言行(接收/发送)一致)
        • post的请求方式:对应数据用data,
        • post要有个请求头headers,这里headers的值用{}括起来,angularJS默认是'application/json'。发送请求头有两种格式来传送数据(注意:php中$_POST[ ]只能接收formData格式数据的application/x-www-form-urlencoded这一种格式的数据)
          • 'Content-Type', 'application/x-www-form-urlencoded',该格式发送的参数为字符串key=value格式,例如"username=zhangsan".
          • 'Content-Type', 'application/json',该格式发送的参数为json格式,例如{"username":"zhangsan"}
        • get的请求方式:对应数据用params,ps:服务器端接收$_GET[], 在success中打印$log.info(ret)可以检查数据是否传到服务器。
        • 1.5.8之前的版本,回调函数用success(),error();1.6版本之后的版本用then()
        • 跨域
          • jsonp 用一句话概括,前端发送一个事先定义好的函数名给服务端,服务端接收这个函数名并拼凑“()”,并返回;前端就接收了一个函数的调用
          • method: "jsonp" ,params:{ callback:"JSON_CALLBACK" },其中JSON_CALLBACK为临时定义的函数名发给服务端,让服务端替换(注:1.6之后不需写这个);在jquery中,自动帮你传了,所以不用这一步。
            1122348-20170330235949508-724974977.png
      • $log 打印调试信息($log.log()、$log.error()、$log.warn()、$log.debug()、$log.info())
      • $filter 在控制器中格式化数据
      • $Timeout 和 $interval
  • 自定义服务

    九、模块加载

  • 配置块
    • 通过config来实现对服务的配置(也可以更改一些服务的默认设置),AngularJS绝大多数服务都有对应的provider。例如:$route 对应的$routeProvider(配置路由)
  • 运行块
    • 特殊:run方法 还是最先执行的。 案例:比如验证用户是否登录,未登录则不允许进行任何其它操作。

      十、路由

  • 功能:一个应用由若干个个视图组成,然后呢,根据不同的业务逻辑展示不同的视图给用户。
  • 理解
    • SPA:Single Page Application 单页面应用
    • 链接使用锚点
    • 单一页面原理:单页面通过hashchange事件监听锚点的变化,实现不同锚点准备找到对应的视图
  • 路由: AngularJS基于单一页面原理进行封装,将锚点变化封装成路由,这也是与后端路由的根本区别
  • 路由的使用:
    • 需引入angular-route.js文件
    • 实例化模块,传入依赖(路由名称为:ngRoute)
      1122348-20170331000012399-1881137498.png

    • 配置路由(config、$routeProvider、when(条件))
      1122348-20170331000025133-1258456732.png

    • 布局模板(用ng-view指令,路由匹配的视图会渲染到该区域)
      1122348-20170331000035492-884642545.png

  • 路由的参数:
    • 两种方法匹配路由:when和otherwise,when可以调用多次。otherwise作为when的补充,参数只有一个。
    • when有两个参数
      • 参数1:是个字符串,代表当前url的hash值;例如:“/:type”
      • 参数2:是一个对象,配置当前路由参数,如视图、控制器
        • template:字符串形式视图模板
        • templateUrl:引入外部视图模板
        • controller:视图模板所属控制器,作用之一:通过http请求向后台要数据
        • redirectTo:跳转到其他路由 例如:“/2”;
    • 获取路由参数,在控制器中注入$routeParams,可以传递参数给后台或其他。1122348-20170331000059742-427191079.png

    1122348-20170331000115055-437614413.png

转载于:https://www.cnblogs.com/ddd-bcz/p/6649276.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/468946.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言关键字(三)

之前的两篇文章 嵌入式Linux&#xff1a;c语言深度解剖&#xff08;数据类型关键字&#xff09;​zhuanlan.zhihu.com 嵌入式Linux&#xff1a;c语言深度解剖&#xff08;入门篇&#xff09;​zhuanlan.zhihu.com 这篇文件继续讲解C语言关键字 想问大家一个问题&#xff0c…

python bottle框架 运维_python bottle 框架实战教程:任务管理系统 V_1.0版 | linux系统运维...

经过1-2个星期的开发&#xff0c;现在用任务管理功能&#xff08;添加、删除、修改&#xff0c;详细&#xff09;、项目管理功能&#xff08;添加、删除&#xff0c;修改&#xff0c;详细&#xff09;等&#xff0c;我把现在完成的版本&#xff0c;叫做1.0吧。发布完这个版本后…

form 窗体增加边框_C#控件美化之路(13):美化Form窗口(上)

在开发中最重要的就是美化form窗口&#xff0c;在开发中&#xff0c;大多都是用会用自主美化的窗口开发程序。本文只是点多&#xff0c;分为上中下节。分段讲解。本文主要讲解窗口美化关键步骤。首先美化窗体&#xff0c;就需要自己绘制最大化 最小化 关闭按钮。其次就是界面样…

第四周数据结构

转载于:https://www.cnblogs.com/bgd150809329/p/6650255.html

gdb x命令_gdb基本命令

参考自&#xff1a;gdb基本命令(非常详细)_JIWilliams-CSDN博客_gdb命令​blog.csdn.net本文介绍使用gdb调试程序的常用命令。 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。如果你是在 UNIX平台下做软件&#xff0c;你会发现GDB这个调试工具有比VC、BCB的图形化调试…

YOLOX-PAI: An Improved YOLOX, Stronger and Faster than YOLOv6

YOLOX-PAI&#xff1a;一种改进的YOLOX&#xff0c;比YOLOv6更强更快 原文&#xff1a;https://arxiv.org/pdf/2208.13040.pdf 代码&#xff1a;https://github.com/alibaba/EasyCV 0.Abstract We develop an all-in-one computer vision toolbox named EasyCV to facilita…

安装一直初始化_3D max 软件安装问题大全

纵使3D虐我千百遍&#xff0c;我待3D如初恋&#xff01;大家好&#xff0c;我是小文。快节奏生活的今天&#xff0c;好不容易有点学习的热情&#xff0c;打开电脑学习下&#xff0c;没想到被简单的软件安装问题浇灭&#xff01;这不是耽误了一位伟大的世界设计师诞生的节奏吗&a…

TCP/IP 协议栈 -- 编写UDP客户端注意细节

上节我们说到了TCP 客户端编写的主要细节&#xff0c; 本节我们来看一下UDP client的几种情况&#xff0c;测试代码如下&#xff1a; server&#xff1a; #include <stdio.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netinet/in.h>…

RuntimeError: Address already in use

问题描述&#xff1a;Pytorch用多张GPU训练时&#xff0c;会报地址已被占用的错误。其实是端口号冲突了。 因此解决方法要么kill原来的进程&#xff0c;要么修改端口号。 在代码里重新配置 torch.distributed.init_process_group()dist_init_method tcp://{master_ip}:{mast…

Windows环境下的安装gcc

Windows具有良好的界面和丰富的工具&#xff0c;所以目前linux开发的流程是&#xff0c;windows下完成编码工作&#xff0c;linux上实现编译工作。 为了提高工作效率&#xff0c;有必要在windows环境下搭建一套gcc,gdb,make环境。 MinGW就是windows下gcc的版本。 下载地址ht…

RuntimeError: NCCL error in:XXX,unhandled system error, NCCL version 2.7.8

项目场景&#xff1a; 分布式训练中遇到这个问题&#xff0c; 问题描述 大概是没有启动并行运算&#xff1f;&#xff1f;&#xff1f;&#xff08; 解决方案&#xff1a; &#xff08;1&#xff09;首先看一下服务器GPU相关信息 进入pytorch终端&#xff08;Terminal&#x…

一张倾斜图片进行矫正 c++_专业性文章:10分钟矫正骨盆前倾

如今&#xff0c;骨盆前倾(又称“下交叉综合征”)非常多&#xff0c;大部分是由于以下两个原因而变得越来越突出&#xff1a;经常久坐不良的运动习惯后面我们讲到纠正骨盆前倾的四个基本步骤&#xff0c;让你快速解决&#xff0c;提高生活质量知识型和系统型的内容&#xff0c;…

TypeError: can‘t convert CUDA tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory

项目场景&#xff1a; 运行程序&#xff0c;出现报错信息 TypeError: cant convert CUDA tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.。 Traceback (most recent call last):File "tools/demo.py", line 97, in <module>vi…

Secure CRT 自动记录日志

配置自动log操作如下&#xff1a; 1.options ---> Global Options 2、General->Default Session->Edit Default Settings 3、Terminal->Log File 设置如图上所示 点击 日志 &#xff0c;在选项框中 Log file name中填入路径和命名参数&#xff1a; E:\Log\%Y_%M_…

java 异步调用方法_乐字节Java编程之方法、调用、重载、递归

一、概述方法是指人们在实践过程中为达到一定目的和效果所采取的办法、手段和解决方案。所谓方法&#xff0c;就是解决一类问题的代码的有序组合&#xff0c;是一个功能模块。编程语言中的方法是组合在一起来执行操作语句的集合。例如&#xff0c;System.out.println 方法&…

git clone 从GitHub上下载项目到服务器上运行+创建虚拟环境

1. 基础的Linux命令 可先进入需要放置文件的路径之下 pwd # 可看当前路径 cd …/ #返回上一层目录 cd ./xx/ #进入当前路径下的下一个文件2. GitHub项目clone到服务器上运行 # 复制GitHub页面的链接&#xff0c;在服务器后台输入git clone 命令即可 git clone https://githu…

java 调用python_Java平台如何调用Python平台?

1. 问题描述Java平台要调用Pyhon平台已有的算法&#xff0c;为了减少耦合度&#xff0c;采用Pyhon平台提供Restful 接口&#xff0c;Java平台负责来调用&#xff0c;采用HttpJson格式交互。2. 解决方案2.1 JAVA平台侧2.1.1 项目代码public static String invokeAlgorithm(Strin…

C 实现 删除字符串空白符的函数 strtrim

说在前面的话 字符串操作在很多C语言比赛里面都有涉及&#xff0c;最近公众号里面的C语言比赛&#xff0c;都是两个关于字符串操作的题目&#xff0c;希望大家认真看题目。 直接上代码 /*************************************************************************> Fil…

javascript犀牛书_犀牛书作者:最该忘记的JavaScript特性

作者&#xff1a; 李松峰转发链接&#xff1a;https://mp.weixin.qq.com/s/guAN1Cz2gYfKdBhmUpLyVA前言JavaScript这门语言的第一个演示版差不多就在25年前诞生。没记错的话&#xff0c;25年前的今天&#xff0c;1995年5月10日&#xff0c;星期三&#xff0c;我刚刚过了创造Jav…

Weblogic(4)—— Linux环境Weblogic12c配置节点管理(nodemanage.properties)来开启应用服务器(server)及线程池配置...

Linux环境搭建weblogic12c服务器&#xff0c;用来进行weblogic服务器项目部署&#xff0c;刚创建weblogic服务器会默认存在AdminServer管理服务器。但是项目应用一般是不能挂在这个服务器上的&#xff0c;需要自己单独创建应用服务器。 使用root权限登录 服务器&#xff1a; 输…