angularJS中自定义指令

学习了angularJS一周,但是大部分时间被自定义指令占用了。博主表示自学互联网好心塞的,发现问题的视觉很狭窄,这比解决问题要更难。这篇文章首先介绍了自定义,然后介绍了在使用自定义指令遇到的问题。

代码模板:

var myModule = angular.module("myModule",[]);

myModule.directive(‘directiveName‘,function(){  

 return{ restrict:string,     

template:string,    

 templateUrl:string, replace:boolean,     

transclude:boolean,     

scope:bollean 或 object,     

link:function(scope,element,attrs){  },

compile:function(element,attrs,transclude){  } ...  

 }

.directive(‘指令名‘, [参数1,参数2,… function(形参1’, 形参2’,…) {}])//该参数是固定的。

第一个参数是指令的名字。定义指令的名字,应该使用驼峰命名法,使用时用-连接。

第二个参数使用一个数组,这是为了防止压缩代码后转义。数组的最后一个元素是一个函数。

restrict:指定如何在模板中使用自定义指令,可取E、A、C、M中的一个或任意组合。默认值为A。

E:表示元素的名称;A:表示元素的属性;C:表示CSS中的class;M:表示注释。

元素和标签使用:

div ng-controller="InController">
    <!-- inputdirct作为属性使用 -->
    <div  add-one="name" add-two="name" inputdirct class="div1"> </div>
    </br></br>
    <!-- inputdirct作为标签使用 -->
     <inputdirct add-one="name" add-two="name"></inputdirct>
</div>

template:指令的内联模板;

template:指令的内联模板的url;

replace:若取值伪true,模板(template)替换指令所在的元素;若取为false,把模板(template)放在指令所在元素的内部。默认值为false。

transclude:把指令元素的子元素移到指令内联模板的内部。

scope : false:自定义指令的scope对象就是指令所在的scope对象(作用域) true:自定义指令建立了一个scope对象,并继承了外层的scope。

object:自定义指令创建了一个scope对象,不继承外层的scope,该scope与外层scope隔离。

自定义指令scope通信:通过传递属性名映射的方式把父scope中指定的属性传递给这个独立的scope。

绑定方式如下:

(1)@:单向文本绑定,传递一个字符串值。当父作用域属性改变时,隔离的scope中的属性值随着变化;当隔离的scope中的属性值改变时,父作用域的属性值不随着变化。

(2)= :双向绑定,传递父作用域的属性,传递的数据类型可以是字符串、数组、对象等。当父作用域属性改变时,隔离的scope中的属性值会发生变化;当隔离的scope中的属性发生变化时,父作用域的属性也会发生变化。

(3)&:执行父作用预计中的函数。

分析:@和=区别

<div ng-controller="InController">
     <inputdirct add-one="name" add-two="name"></inputdirct>
</div>
 <script src="bower_components/angular/angular.js"></script>
 <script>
    var app = angular.module("App",[]);
    //  控制器
      app.controller(‘InController‘,[‘$scope‘,function($scope){
            // $scope.inputdate = ‘‘;
            $scope.name=‘LiShuyi‘;//控制器中给name赋值‘Lishuyi’,添加到属性add-one和add-two中

            $scope.$watchCollection(‘name‘,function(now,old){console.log(now)});

            }]);
     // 自定义指令
      app.directive("inputdirct",function(){
          return{
                  restrict : ‘EA‘,
                  scope:{addOne:‘@‘,
                  addTwo:‘=‘},
                  template:‘<span>使用@单向文本绑定{{addOne}}</span></br>                  <span>使用=双向文本绑定{{addTwo}}</span>‘,
                  // 分别使用@和=引用add-one和add-two,通过浏览器的输出结果可以发现,@输出的di元素中add-one属性的值,而=输出的是在控制器中赋值的name。
                     }

     });

compile、link:这两个选项关系到AngularJS的生命周期。

时间: 2024-10-13 00:57:06

angularJS中自定义指令的相关文章

带你走近AngularJS - 创建自定义指令

为什么使用AngularJS 指令? 使用过 AngularJS 的朋友应该最感兴趣的是它的指令.现今市场上的前端框架也只有AngularJS 拥有自定义指令的功能,并且AngularJS 是目前唯一提供Web应用可复用能力的框架. 目前有很多JavaScript 产品提供插件给Web开发人员.例如, Bootstrap 就是当前比较流行的提供样式和JavaScript插件的前端开发工具包.但是开发人员在使用Booostrap中的插件时, 必须切换到JavaScript 模式来写 jQuery

angularJS中自定义验证指令中的$parsers and $formatters

本文翻译自:$parsers and $formatters in Custom Validation Directives in Angular JS 在使用angularJS的应用中,有时候我们需要定义自己的表单验证.自定义验证在angularJS中是通过创建指令来实现的,该指令依赖于ng-model指令,主要是依赖于它的controller. ng-model指令提供2个由函数组成的数组: $parsers 和 $formatters,这些函数用于实现自定义验证逻辑时调用.这两个数组的用途

走进AngularJs(四)自定义指令----(中)

上一篇简单介绍了自定义一个指令的几个简单参数,restrict.template.templateUrl.replace.transclude,这几个理解起来相对容易很多,因为它们只涉及到了表现,而没有涉及行为.这一篇将继续学习ng自定义指令的几个重量级参数,了解了它们之后我们的custom directive将不光能"看",还要能"动".开始~ 理解compile和link 不知大家有没有这样的感觉,自己定义指令的时候跟写jQuery插件有几分相似之处,都是先预先

AngularJS笔记--自定义指令

在前端开发中, 我们会遇到很多地方都会用到同一种类型的控件.AngularJS提供了自定义指令功能,我们可以在指令里面定义特定的html模板.提供给前台html调用. 一. 指令的简单定义.  下面定义了一个简单的控件,点击后调转到博客园. Note: 1.命名方式:directive必须以小写字母开头,其中如果后面由大写字母,html调用的时候就要用 - 将单词分开. <html> <script src='angular.js'></script> <scri

AngularJS中的指令

欢迎大家讨论与指导 : ) 明天天会继续更新本文O(∩_∩)O  前言 当AngularJS中的内置指令不能满足我们的需求,或者当我们需要创建一个能够用于多个AngularJS程序的自包含的功能单元时,我们应该创建自定义指令来满足需求.  一.创建自定义指令   一 . 1 命名规则  我们要在创建指令时使用峰驼式命名,例如指令是 <div unordered-list></div>  在声明指令时我们需要这样子写 app.directive("unorderedList

走进AngularJs(五)自定义指令----(下)

自定义指令学习有段时间了,学了些纸上谈兵的东西,还没有真正的写个指令出来呢...所以,随着学习的接近尾声,本篇除了介绍剩余的几个参数外,还将动手结合使用各参数,写个真正能用的指令出来玩玩. 我们在自定义指令(上)中,写了一个简单的<say-hello></say-hello>,能够跟美女打招呼.但是看看人家ng内置的指令,都是这么用的:ng-model="m",ng-repeat="a in array",不单单是作为属性,还可以赋值给它,与

浅谈AngularJS中的指令和指令间的相互通信

说到AngularJS,我们首先想到的大概也就是双向数据绑定和指令系统了,这两者也是AngularJS中最为吸引人的地方.双向数据绑定呢,感觉没什么好说的,那么今天我们就来简单的讨论下AngularJS这个框架的指令系统. 指令作为AngularJS中最为重要的部分,所以这个框架本身也是自带了比较多的的指令,但是在开发中,这些指令通常不能满足我们的需要,所以我们也是需要自定义一些指令的.那么一个AngularJS指令在HTML代码中可以有四种表现形式: 1.作为一个新的HTML元素来使用. <h

vue中自定义指令

在vue中自定义标签,首先要调用vue中一个directive的方法,具体方法:Vue.direction('指令名称',function(){ }); 例如我们要写一个关于颜色的指令,叫v-colorred: 1 Vue.directive('colorred',function(){ 2 3 this.el.style.color='red'; 4 }); 在html中,我直接用v-colorred指令就可以了,例如: 1 <p v-colorred>1234567890</p>

Angularjs[25] - 自定义指令(1)(restrict, template, replace)

自定义指令: module.directive(name,directiveFactory) @see $compileProvider.directive() ??  不要使用 ng 为指令,若指令名为 xxx-yyy,在设置指令名时应为 xxxYyy 即驼峰命名法. restrict: 可以任意组合四种风格,如果忽略 restrict,默认为A. 字母 风格 示例 E 元素 <my-dir></my-dir> C 样式类 <span class="my-dir: