资讯专栏INFORMATION COLUMN

Angularjs学习笔记指令

LeexMuller / 1277人阅读

摘要:自定义指令中有很多内置指令,一般都是以开头的比如等等。本文介绍的自定义指令的用法。该参数的意思是替换指令的内容,更改上面的例子。将属性绑定到父控制器的域中学习概念多指令中的参数中增加了的值和的点击函数。

自定义指令

angularjs中有很多内置指令,一般都是以ng开头的;比如:ng-app,ng-click,ng-repeat等等。本文介绍angularjs的自定义指令的用法。

指令的定义

首先在html标签处设置ng-app的属性值,然后在js文件中就可以调用angular.module得到一个module,最后就可以用module.directive定义一个指令。代码如下:

html文件




    
    directive
    
    



    

js文件

var app = angular.module("directive",[]);
app.directive("myDirective",function(){
   return {
       restrict:"A",
       require:true,
       template:"hello angular",
   };
});

这个例子只使用了directive的最简单的参数配置,下面是一个详细的参数配置列表

app.directive("myDirective", function factory(injectables) {
    return {
        restrict: string,//指令的使用方式,包括标签,属性,类,注释
        priority: number,//指令执行的优先级
        template: string,//指令使用的模板,用HTML字符串的形式表示
        templateUrl: string,//从指定的url地址加载模板
        replace: bool,//是否用模板替换当前元素,若为false,则append在当前元素上
        transclude: bool,//是否将当前元素的内容转移到模板中
        scope: bool or object,//指定指令的作用域
        controller: function controllerConstructor($scope, $element, $attrs, $transclude){...},//定义与其他指令进行交互的接口函数
        require: string,//指定需要依赖的其他指令
        link: function postLink(scope, iElement, iAttrs) {...},//以编程的方式操作DOM,包括添加监听器等
        compile: function compile(tElement, tAttrs, transclude){
            return: {
                pre: function preLink(scope, iElement, iAttrs, controller){...},
                post: function postLink(scope, iElement, iAttrs, controller){...}
            }
        }
    };
});

下面介绍几个常用的参数

restrict

四个值"A","E","C","M",分别代码属性,标签,类,注释,如下:

restrict:"A"   
restrict:"E" restrict:"C"
restrict:"M"

只测试了A和E的值,感兴趣的朋友可以测试一下其他。

template 和 templateUrl

这两个参数只需要设置一个就行。

transclude

该参数的意思是替换指令的内容,更改上面的例子。html更改部分

hello angular

js更改部分

 app.directive("myDirective",function(){
    return {
        restrict:"A",
        require:true,
        transclude:true,//增加transclude参数的设置
        template:"
",//将指令的内容替换到span标签下 }; });
scope
false               默认值。使用父作用域作为自己的作用域
true                新建一个作用域,该作用域继承父作用域
javascript对象       

当scope为javascript对象时,键值对的形式定义。直接看例子吧!
html:




    
    directive
    
    


    
{{text}}

js:

var app = angular.module("directive",[]);
app.directive("myDirective",function(){
    return {
        restrict:"A",
        template:"
{{mytitle}}
", require:true, replace:true, transclude:true, //将etitle属性绑定到父控制器的scope域中 scope:{ mytitle:"=etitle" }, } }); app.controller("directive",function($scope){ $scope.title = "学习"; $scope.text = "angular js概念多"; });
link

link的值是一个function,一般用在在dom上绑定动作的。请看下面实现的一个折叠面板的例子。




    
    directive
    
    


    
{{text}}
var app = angular.module("directive",[]);
app.directive("expander",function(){
    return {
        restrict:"E",
        template:"
{{mytitle}}
", require:true, replace:true, transclude:true, //将etitle属性绑定到父控制器的scope域中 scope:{ mytitle:"=etitle" }, link: function(scope,element,attr,accordionCtrl){ scope.showText = false; scope.toggleText = function(){ scope.showText = ! scope.showText; } } } }); app.controller("directive",function($scope){ $scope.title = "angular 学习"; $scope.text = "angular js概念多"; });

expander指令中的link参数中增加了showText的值和toggleText的点击函数。

最后,再看一个多个折叠面板的例子




    
    directive
    
    


    
{{expander.text}}

ng-repeat便利expanders的所有元素

var app = angular.module("directive",[]);
app.directive("expander",function(){
    return {
        restrict:"E",
        template:"
{{mytitle}}
", require:"^?accordion", replace:true, transclude:true, //将etitle属性绑定到父控制器的scope域中 scope:{ mytitle:"=etitle" }, link: function(scope,element,attr,accordionCtrl){ scope.showText = false; accordionCtrl.addExpander(scope); scope.toggleText = function(){ scope.showText = ! scope.showText; accordionCtrl.getOpened(scope); } } } }); app.controller("directive",function($scope){ $scope.expanders = [ {title:"angular",text:"angular js概念多"}, {title:"react",text:"react + reduce + ui路由机制"} ]; }); app.directive("accordion",function(){ return { restrict:"E", template:"
", replace:true, transclude:true, controller:function(){ var expanders = []; this.getOpened = function(selectExpander){ angular.forEach(expanders,function(e){ if (selectExpander != e){ e.showText = false; } }); } this.addExpander = function(e){ expanders.push(e); } } } });

demo源码地址

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/79163.html

相关文章

  • Angularjs学习笔记指令

    摘要:自定义指令中有很多内置指令,一般都是以开头的比如等等。本文介绍的自定义指令的用法。该参数的意思是替换指令的内容,更改上面的例子。将属性绑定到父控制器的域中学习概念多指令中的参数中增加了的值和的点击函数。 自定义指令 angularjs中有很多内置指令,一般都是以ng开头的;比如:ng-app,ng-click,ng-repeat等等。本文介绍angularjs的自定义指令的用法。 指令...

    Cristic 评论0 收藏0
  • angularjs学习笔记指令a,ngHref

    摘要:点击我啊当属性为空时,点击的时候页面不会刷新了,我们再也不需要这样写了点击我啊一般和指令结合使用点击我啊你点击我了一般和标签结合使用。使用了就就可以避免出现这种问题。如果链接中有表达式,就使用代替 a 点击我啊 当href属性为空时,点击的时候页面不会刷新了,我们再也不需要这样写了 点击我啊 一般和ng-click指令结合使用 #html 点击我啊 #scr...

    Channe 评论0 收藏0
  • AngularJS学习笔记(2) --- 指令参数和scope绑定策略

    摘要:引言指令可以说是的核心,而其开发也是比较困难的,本文主要介绍指令的一些参数和的绑定策略。指令执行的优先级,用于多个指令同时作用于同一个元素时。改变父会影响指令,而改变指令不会影响父。在父和指令之间建立双向绑定。 引言 指令(Directive)可以说是 AngularJS 的核心,而其开发也是比较困难的,本文主要介绍指令的一些参数和scope的绑定策略。 参数 从 AngularJS ...

    AndroidTraveler 评论0 收藏0
  • angularjs学习笔记指令input

    摘要:新增的日期选择器。类型必填必填最小长度最大长度正则匹配正则匹配更新触发即使没有使用校验属性,只要数据不符合格式,就会被更新成。 input[text] input一般和ngModel结合使用来实现双向绑定,同时angular提供了很多表单校验的指令 required 必填 ngRequired 必填(ngRequired可以控制是否是必填校验) ngMinlength 最小长度...

    princekin 评论0 收藏0
  • angularjs学习笔记—事件指令

    摘要:适用标签所有触发条件单击适用标签所有触发条件双击适用标签触发条件失去焦点适用标签触发条件获取焦点适用标签触发条件更新输入框的内容改变并不代表的值更新。如果按一个键很久才松开,发生的事件为。 ngClick 适用标签:所有触发条件:单击 #html click me click me #script angular.module(learnModule, []) ...

    Lemon_95 评论0 收藏0

发表评论

0条评论

LeexMuller

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<