• angular知识点总结


    angularjs

    angular支持的运算

    逻辑运算
    比较运算
    三目运算
    调用字符串对象的成员方法
    使用直接变量表示法创建对象
    使用数组
    (不可以)new var
    (不可以)调用全局es

    javascript对象中的分类

    1)ECMAScript标准对象 Global String Data RegExp Array Object
    可以在任何一个js解析器中使用
    2)宿主对象
    DOM: node element attribute
    bom: window document
    只能在浏览器中的js解释器中使用 不能在独立的服务器端js解释器(如NodeJS)中使用
    3)用户自定义对象

    angular指令

    ng-app
    ng-init
    ng-bind
    ng-controller
    ng-repeat
    ng-if

    angular声明Model数据

    1)使用Controller对象创建Model数据
    ngApp -> Module -> Controller ->Model
    1)声明ngApp
    2)创建自定义模块 angular.module(‘myModule’,[ng]);
    3)在应用中注册自定义模块: ng-app=”模块名”
    4)在模块中声明controller
    5)在view中指定controller对象的作用范围
    6)在controller中声明model

    Angular四大特征

    1)MVC模型
    Model 模型业务数据 (商品,订单 核心数据 从数据库来)
    (前端应用中就是保存在JS变量,保存在特定范围内的模型变量)
    View 视图 业务数据的呈现(前端应用中HTML)
    Controller 控制器业务数据的获取删除修改(前端应用中function)

    model:业务数据($scope,$rootScope.xx)
    view:业务数据呈现 html+ngXXX
    control:操作业务数据 .controller(“”,function(){})

    2)双向数据绑定
    方向1:Model绑定到View 只要Model变View随着变
    方向2:View(表单控件)绑定到Model 只要View变 Model随着变
    (最大的缺陷是)原生js dom只有特定事件的监听机制 没有监听数据/对象/值改变的机制

    3)依赖注入
    如何解决依赖关系:
    1.主动创建方式
    var c1 = new Car(); //主动创建依赖对象
    var d1 = new Driver(c1); //传递依赖对象
    2.被动注入(Injection)方式
    module.controller(‘控制器’,function($scope,$interval){})
    angular中的ngController指令在实例化控制器对象时 会根据指定的形参名
    创建出控制器所依赖的对象 并注入给控制器对象-依赖注入现象
    (如果使用yui压缩 会导致形参传递失败)
    (解决:
    ....controller(‘myCtrl’,[‘$interval’,’$scope’,’$timeout’,function($interval,$scope,$timeout){
    }])
    可以被注入的对象:
    1.$rootScope
    2.$interval
    3.$timeout
    4.$log
    5.$http
    6.$location

    )
    4)模块化(Module)设计-体现 “高聚合低耦合”

    Angular与jQuery关系

    jquery操作思路:先找元素 再操作元素 $(…)
    AngularJS操作思路:创建业务数据 绑定数据 维护数据
    Angular已经把dom操作封装了

    angular在加载时

    判断 是否有jquery.js 如果存在用当前jq操作dom
    不存在 会使用自定义的精简版本jqLite-只有核心jQuery方法

    MVC模型

    1)在一个Angular应用中可以声明多个模块
    2)某个模块可以依赖于其他模块
    3)有一个模块必须注册给ngApp指令 - 启动模块
    4)一个模块中可以声明多种组件
    1.controller
    2.directive
    3.service
    4.filter
    5.....
    5)$scope表示当前控制器对象的有效范围/作用域
    声明在某个$scope中的模型数据 一般情况下不能被其他控制器使用
    想在多个控制器间共享/传递数据 可以在根作用域中–$rootScope每个Angular应用(ngApp)只有一个
    唯一的$rootScope对象
    控制器的本质用途 用于划分一个大型页面中的不同的div块 每个这样的块中都有自己专用的数据 以及可以
    和其他块共享的数据

    双向数据绑定

    1)方向1:Model绑定到View 此后不论何时只要Model发生变化 View会同时更新
    实现方法:{{}} ngBind ngIf ngRepeat ngShow ngChecked 等等几乎所有的现实数据指令都实现了
    方向1的绑定
    2)方向2:View绑定到Model 把视图中用户可以修改的HTML元素-即表单控件的值
    绑定到一个Model变量上 此后 不论何时只要用户修改了表单控件的值
    后台模型变量的值就会随之改变
    实现方法:ngModel
    为了监视Model变量是否真的改变 可以使用$scope.$watch()函数对Model数据进行监视
    -单行文本输入域 ngModel可以把value属性绑定到Model变量
    -复选框 ngModel可以把true/false 值绑定到Model变量
    -单选框 ngModel可以把当前选中的单选框的value值绑定到Model变量
    -下拉框 ngModel可以把当前选中的option的value值绑定到Model变量

    4.ng模块提供的service组件

    1.$rootScope 用于在所有的控件器间共享数据
    2.$interval 周期性定时器服务
    3.$timeout 一次性定时器服务
    4.$log 提供5个基本的日志输出服务
    5.$http 提供异步Http请求(AJAX服务)
    $http.get() $http.post() $http.put() $http.delete()
    resful
    用法:$http({method:’GET’,url:’/xx.php’}).
    success(fn).
    error(fn)
    简化版用法 $http.get(‘url’).success(fn);
    $http.get(‘url’).success(fn);

    5.ng模块提供的directive组件

    1.ngApp
    2.ngInit
    3.ngBind
    4.ngIf
    5.ngRepeat
    6.ngClick
    7.ngMouseOver
    8.ngSrc 为img标签指定src属性 可以防止404
    9.ngShow 若赋值为true 则display:block 否则display:none
    10.ngHide 若赋值为true 则display:none 否则display:block

    6.ng模块提供的过滤器

    Filter:把Model数据在显示时以某种特定的格式呈现
    1.lowercase
    {{表达式|lowercase}}
    2.uppercase
    3.number
    4.currency
    5.date

    7.单页页面与多页页面

    多页应用单页应用(spa)
    项目中有多个完整的HTML页面 项目中只有一个完整的HTML页面(其他都是html片段)
    使用超链接,js实现跳转 使用超链接,伪js
    所有的页面请求都是同步的-客户端等待服务器响应时浏览器一片空白 所有的“伪页面请求”都是异步请求-客户端在等待下一个页面片段到时,仍可以显示前一个页面内容
    不便于实现两个页面间切换过场动画 很容易实现两个伪页面间的过场切换动画
    浏览器需要不停的创建(删除)完整的dom树 浏览器只需要创建一个完整的dom树 此后的伪页面切换只是在换某个div中的内容
    每个页面需要加载自己的css和js文件 整个项目的css和js文件只需要加载一次

    手动实现 单页面应用的步骤
    1)创建一个完整的html页面 引入所需的所有css和js body中只需要一个伪页面的容器元素

     


    2)创建若干个伪html页面/模板页面 只需要声明html片段
    3)客户端请求完整的html页面 同时url中再追加一个特殊的标记
    如index.html#/start-指定要加载的伪页面的名称
    4)浏览器解析出的伪页面名称 查找一个字典 找到该名称对应的模板页面的url
    window.location.hash

    /start => template/main.html

    /m => template/main.html

    5)客户端发起异步ajax请求 获取模板页面的内容
    加载到index.html的伪页面容器中

    index.html 路由地址 模板页面

     


    8.ngRoute

    route: 路由 通过某条路径找到目标内容
    ngRoute: 根据浏览器中url的特殊地址标记(形如#/xxx)
    查找到该标记对应的模板页面 异步加载到当前页面的ngView指令中
    1.创建一个完整的html页面 其中声明一个容器 ngView指令 引入angular.js和angular-route
    2.创建多个模板页面(习惯上放在一个特别的目录下 如tpl)
    3.创建Module 声明依赖于ng和ngRoute两个模块
    4.在Module中配置路由字典
    5.在浏览器中测试
    http://IP地址/index.html#/路由地址

    6.ng-view跳转
    超链接
    js location.href=”#/路由地址”

    $scope.jump = function(){
    //不能使用多页面跳转
    $location.url(‘#/路由地址’)
    }

  • 相关阅读:
    计算机网路基础
    [python基础] python 2与python 3之间的区别 —— 默认中文字符串长
    [python基础] 同时赋值多个变量与变量值交换
    [python基础] python 2与python 3的区别,一个关于对象的未知的坑
    [python基础] python 2与python 3之间的区别 —— 不同数据类型间的运算
    [python基础] 浮点数乘法的误差问题
    关于HTMLTestRunner的中断与实时性问题
    [python自动化] 关于python无法修改全局变量的问题
    关于RFC2544中的Cut-Through和Store-and-Forward模式
    google filament pbr
  • 原文地址:https://www.cnblogs.com/weizaiyes/p/6518180.html
Copyright © 2020-2023  润新知