zoukankan      html  css  js  c++  java
  • angular笔记

    /*
    angular
    MVVM模式
    M :model
    V :view
    VM :ViewModel
    模块
    ng-app='' //html中调用模块
    angular.module // js中声明模块
    控制器
    ng-controller='' //html中调用控制器
    模块.controller('控制器名', ['依赖1',function(形参1,必须一一对应){ }]) //js声明控制器

    指令
    内置指令
    ng-show/hide/if
    ng-show/hide //原理 css: display
    显示隐藏一段内容
    ng-show: true 显示
    ng-hide: true 隐藏
    原理 css: display
    ng-if: 操作节点
    显示隐藏一段内容
    ng-if: true 显示
    ng-if: false 隐藏(移除节点)
    如:<div ng-if='条件'></div>

    ng-app ng-controller //也是内置指令
    ng-class
    改变元素类名:
    1. html中: ng-class='变量a'
    js中: $scope.a = 'active'
    例: div ng-class='a' => div class="active"

    2. ng-class='{情况1:'类1', 情况2:'类2'...}[表达式,数据]'
    如 :选项卡, 轮播
    关键代码
    ng-class="{true:'active'}[now==$index]"
    ng-style
    改变样式
    如: ng-style='{ CSS属性:值 }'

    ng-repeat
    通过遍历数组, 创建元素/节点
    注意:
    track by 序号($index, i.id...不重复)
    [1,23,4] 不写track by 正常
    [1,1, 2,2,2, 3,3,3] 不写track by 报错
    ng-model
    绑定表单中表单域value值/ textarea: html
    替换原始表单中 name 属性
    ng-src
    ng-href
    ng-bind
    显示scope中的变量 ==> 类似于{{ }}
    ng-bind与{{}}的区别?
    {{}}会闪屏, 会显示出 {{a}}
    解决办法:
    额外加: ng-cloak
    <p ng-cloak>{{a}}</p>
    => 换成 ng-bind
    => 路由中加入 resolve

    ng-include(同php中 require)
    引入其他html页面
    ng-include="'资源路径'"
    <div ng-include="'a.html'"></div>
    自定义指令
    将一段 html和js一起封装到指令中
    js声明:
    模块.directive('指令名', function(){
    return {
    配置对象:
    templateUrl:'index-directive.html',
    replace: true //默认是 false 注意: 如果设置为true, html模板只能有一个父节点,同时原标签的属性和类会继承到这个节点上
    restrict:‘AECM’ //默认: AE 规定指令以何种方式 A:属性,E:元素,C: 类,M: 注释
    scope:与外界交互的属性,默认: false,false: 直接引用父级中的变量
    true: 复制父级中的变量, 当改变自身变量时, 断开与父级关系
    scope{ a: '=属性名' } : 独立作用域
    注释:{ 指令中变量名 : '=html中的属性名' a : '=b(驼峰)' }
    将 html中的属性名对应的变量 双向绑定给 指令中变量名
    如: <div b(烤串)='父级变量'>
    指令中控制器的scope.a = 父级变量
    compile:function(element,attrs){ } // $attrs与外部交互的对象之一
    link:function(scope,element,attrs){
    pre: function () {
    console.log('link-pre')
    },
    post: function () {
    console.log('link-post')
    } } }
    注意: compile 没有scope,
    link和compile一起使用, link不执行
    compile和 ngRepeat一起使用时,
    a. 绑定事件无效, 动画无效
    b. compile只执行一次, link出现几次指令, 就执行几次

    执行顺序:
    compile
    controller
    link: pre, post
    })
    html调用:
    <div 作为属性的指令>
    <作为标签的指令></作为标签的指令>
    注意:
    命名指令: js中声明 指令名时, 为驼峰模式, 到html调用时, 转为烤串模式

    服务
    内置服务
    $http //与服务器进行数据交互 == ajax
    .get(url,{ params:{get方式参数,}, cache:true }).success(fn).error(fn)
    cache:true 可以缓存内容
    .post(url,{ 参数 }).success()//.post区别: 不用放入 params 中
    .jsonp(url,{ 参数 }).success()
    原生js ajax 实现缓存
    如: 发出之前进判断:
    if(!templateCache[url]){
    success:function(result){
    templateCache[url] = result
    }
    }else{
    return templateCache[url]
    }
    $scope
    $watch //监听变量
    var watcher = $watch('变量名', function( 新数值, 旧数值, scope ){ }, 是否深度监听)
    取消监听
    watcher();
    $apply
    手动扫描各个变量是否改变
    实际调用的是 digest
    $digest
    脏数据检查
    $emit
    向上发送 $scope.$emit(主题, 数据)
    //addEventListener('事件名', fn, true:冒泡 ,false:捕获)
    $broadcast
    向下广播 $scope.$broadcast(主题, 数据)
    $on
    接受发送/广播的消息 发布订阅模式
    $scope.$on(主题,function(){ })
    $interval
    间隔执行 var interId = $interval(fn, 时间ms)
    取消间隔 $interval.cancel(interId)
    $timeout

    自定义服务
    $q
    deffer
    resolve:{ 写在路由中,相当于初始化内容 }
    return deffer.promise
    将一段代码封装到服务中,减少控制器中的代码,与控制器中scope无关
    .constant('resolveUrl', { //声明常量
    PROVINCE_URL: '../../php/list_pro.php',
    CITY_URL: '../../php/list_city.php',
    TOWN_URL: '../../php/list_town.php'
    })
    1. factory('服务名', function(){
    var 私有变量;
    return {
    方法1:function
    数据1:数据
    }
    })
    2. service('服务名', function(){
    var 私有属性;
    //构造函数
    this.方法1 = fn;
    this.属性1 = 数据;
    })

    3. provider('服务名',function(){
    this.$get=function(){
    return {服务内容}
    }
    })
    4. provider('服务名',{
    $get:function(){
    return {服务内容}
    }
    })
    路由
    ngRoute 一级路由 基于 url
    a href='#/url'
    ng-view 将路由目标显示的位置

    ui.router
    多级路由 基于 state
    ui-view 同 ng-view
    ui-sref='状态' 同href
    ui-sref-active='类名' //当前状态激活时, 显示的类
    配置路由:
    angular.module('routeApp', ['resolveApp', 'resolveTestApp', 'ui.router'])
    .config(function ($stateProvider, $urlRouterProvider, $httpProvider) {
    $urlRouterProvider.otherwise('/resolve'); //初始化开始的页面
    $stateProvider
    .state('resolve', {
    url: '/resolve',
    templateUrl: 'resolve-template.html',
    controller: 'resolveCtrl',
    resolve: { //进入 路由指向页面前, 需要执行的内容
    gameList: function () {//自定义服务
    var a = 'hello 红色预警';
    return a;
    },
    gameListFromPHP: function ($http) {
    return $http.get('../../php/game_roles.php');
    }
    }
    })
    stateProvider.state():配置参数
    urlRouterProvider.otherwise('/状态')
    路由实现原理:
    pjax: history.pushstate + ajax
    onpopstate 事件: 前进或后退时触发

    过滤器
    {{ 变量 | 过滤器名:条件 }}
    自定义过滤器
    模块.filter('名',function(){
    return function(参数){
    代码
    }
    })

    ngAnimate 动画
    引入版本要一致
    类名
    .ng-hide-remove{ 样式 }
    .ng-hide-remove-active{ 样式 }
    .ng-hide-add{ 样式 }
    .ng-hide-add-active{ 样式 }
    <!--
    JS
    性能 减少操作在文档中的节点次数
    先生成临时节点, 给临时节点添加子节点, 最后插入到 dom树(只进行一次插入操作)
    document.createDocumentFragment();
    使用 DocumentFragment 文档碎片作为临时节点进行操作


    Think in Angular
    生成节点
    删除节点
    ng-repeat='i in arr'
    arr.push => html中自动生成一套节点
    arr.splice/pop => html中自动删除对应数组的元素

    */


  • 相关阅读:
    SQL注入实验-2021.01.24
    数据库的搭建与基本语句2021-01-24
    Linux
    磁盘配置
    在Vmware中Centos下的Hadoop环境搭建
    Linux系统(CentOS)-2021.1.19
    中间件,JavaScript,PHP及burpSuite暴力破解实验-2021.1.16
    html,css学习笔记-2021.1.15
    第一周学习视频(二)
    第一周学习视频(一)
  • 原文地址:https://www.cnblogs.com/xiaobaibubai/p/7097865.html
Copyright © 2011-2022 走看看