• AngualrJS之自定义指令


    一、指令

    指令directive是AngularJS的核心之一
    
    包括
      - 用于扩展HTML元素、属性的指令
      - 执行特定功能的指令
      - 自定义指令
    
    内置指令基本上都是以ng-开头

    二、内置指令

    1、属性指令

    ng-href:代替a标记的href属性
    ng
    -src:代替img等标记的src属性
    ng
    -disabled:设置表单元素是否可用
    ng
    -checked:设置选项是否选中
    ng
    -readonly:设置文本元素是否只读
    ng
    -selected:设置下拉选项是否选中
    ng
    -class:设置class属性
    ng
    -style:设置style属性,应该是对象或JSON

     2、功能指令

    ng-app:设置当前元素是 AngularJS根元素
    
    ng-controller:用于为应用添加控制器
    
    ng-include:用于包含外部的HTML文件
    
    ng-if:用于在表达式为false时移除HTML元素
    
    ng-switch:根据表达式显示或隐藏对应的部分
    
    ng-repeat:用于循环输出指定次数的HTML元素
    
    ng-init:执行给定的表达式
    
    ng-bind:使用给定的变量或表达式的值来替换HTML元素的内容
    
    ng-bind-template:与上类似,可绑定多个
    
    ng-cloak:用于在应用加载时防止代码未加载完而出现AngularJs表达式的问题
    
    ng-model:用于绑定表单元素到作用域变量中(双向绑定)
    
    ng-hide/ng-show:在表达式为true时隐藏/显示HTML元素
    
    ng-form:增强HTML表单
    
    ng-change:类似于onchange事件
    
    ng-click:类似于onclick-事件
    
    ng-submit:类似于onsubmit事件

    三、自定义指令

    1、概述

    使用directivej方法可以自定义指令,语法:模块对象.directive(“指令名”,[注入内容,回调函数]);
    
    指令名采用骆驼命名法,使用时将驼峰名称改写为短横线连接的名称,如定义时为: itFirst,则使用时为it-first;第一个词不建议使用ng
    
    回调函数返回一个JSON对象,该对象包括了自定义指令的配置,即指令对象定义
    
    指令对象定义是一个JSON格式,包含大量指令配置项

     

    2、指令的生命周期

    加载阶段:以ng-app为入口,确定 EAngularJSt的应用范围
    
    编译阶段:遍历应用范围,找到所有指令,根据指令的定义进行DOM转换(由template、templateUrl、replace等配置项决定),如果指令有compile函数则调用
    
    链接阶段:应用范围内的每条指令运行link函数,如果有DOM操作,也应该在link函数中执行

     

     3、指令配置项

    restrict:字符串,指令以何种形式使用,‘A’ 表示属性Attribute , ‘E’ 表示元素Element 、 ‘C’ 表示类Class 、‘M’ 表示注释Comment( 需加directive:),也可以是它们的组合形式。默认值为AE ,可以通过元素名和属性名来调用指令。
    
    template:一段HTML 文本或返回一个HTML 文本的函数,用来填充指令内容,当replace为true时结果必须有且仅有一个根元素 。如果页面中多个指令的模板基本相同,可以使用$templateCache 进行缓存后再使用
    
    replace:布尔,是否替换原有元素,默认false
    
    templateUrl:指定外部模板文件的路径,或返回路径的函数,用于代替template
    
    transclude:是否包含原有内容,设置为true 时,可在template中使用ng-transclude指令获取原有内容,即需要 配合ng-transclude 指令使用
    
    priority:指定同一元素上多个指令的controller调用的优先级,数值类型,值越大优先级越高,默认为0
    
    terminal:同一元素上优先级比本指令低的指令或低层次的指令是否执行,布尔类型
    
    scope:表示指令的作用域,取值有三种(false 、true 、{} 空对象),false 表示继承父作用域,同一个作用域;默认值true表示从父作用域继承并创建一个新作用域;{} 空对象表示隔离作用域,默认无法访问父作用域,但可以通过配置绑定( 隔离) 策略,
    
    将父作用域中指定数据绑定到隔离作用域中,绑定策略有三种形式:@:单向,父作用域影响隔离作用域,将属性作为字符串传递;=:双向, 父作用域与隔离作用域相互影响,将属性按原类型传递;&:方法的访问形式,注意传参数的写法,
    
    必须以对象形式传递可以在以上符号的后面指定绑定的名称( 属性名),也可省略简写
    
    link:回调函数,用于处理数据、DOM,可以接受四个参数,分别是作用域scope、元素element、属性attribute、依赖的其它指令控制器controller;出于通用性考虑,scope提供$apply(“ 函数名()”)的形式调用函数,函数名可通过属性传递
    
    controller:不同于之前的控制器,是指令自身的控制器,用于向外部公开指令所具有的方法
    
    require:字符串,表示所依赖的其它指令名称,此时会将其它指令的控制器注入进link函数,作为第4个参数;指令名称前可以添加符号:^ 表示会在上层指令中查找,?表示找不到则传入null,可以组合成?^
  • 相关阅读:
    成为高级Java工程师,你必须要看的技术书籍
    MYSQL存储引擎介绍--应用场景
    RocketMq的安装使用
    调用第三方物流公司API即时查询物流信息
    移动终端处理器构成和基带芯片概述
    数据库水平切分(拆库拆表)的实现原理
    使用TortoiseGit操作分支的创建与合并
    mysql安装教程
    初步认识dubbo--小案例
    【算法】混合流体模拟demo
  • 原文地址:https://www.cnblogs.com/Coufusion/p/10783940.html
Copyright © 2020-2023  润新知