AngularJs学习笔记__4、自定义指令

本文介绍如何使用AngularJS自定义指令创建一个简单的展开组件,包括指令的声明方式、实例应用以及效果展示。

AngularJs可以自定义指令。指令一般有4中声明方式:

E - 元素名称: <my-directive></my-directive>
A - 属性: <div my-directive="exp"> </div>
C - 类名: <div class="my-directive: exp;"></div>
M - 注释: <!-- directive: my-directive exp -->

下面直接看实例:

新建一个index.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="zh"  ng-app="expanderModule">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>AngularJs自定义指令</title>
<script type="text/javascript" src="js/angular.js"></script>
<script type="text/javascript" src="js/index.js"></script>
  <link rel="stylesheet" type="text/css" href="css/ExpanderSimple.css"/>
</head>
<body>
	<div ng-controller="SomeController">
		<expander class="expander" expander-title="title">
			{{text}}
		</expander>
	</div>
</body>
</html>
新建一个css文件ExpanderSimple.css:

.expander {
    border: 1px solid black;
    width: 250px;
}

.expander>.title {
    background-color: black;
    color: white;
    padding: .1em .3em;
    cursor: pointer;
}

.expander>.body {
    padding: .1em .3em;
}
在新建一个index.js

var expanderModule=angular.module('expanderModule', [])
expanderModule.directive('expander', function() {
    return {
        restrict : 'EA',
        replace : true,
        transclude : true,
        scope : {
            title : '=expanderTitle'
        },
        template : '<div>'
                 + '<div class="title" ng-click="toggle()">{{title}}</div>'
                 + '<div class="body" ng-show="showMe"  ng-transclude></div>'
                 + '</div>',
        link : function(scope, element, attrs) {
            scope.showMe = false;
            scope.toggle = function(){
                scope.showMe = !scope.showMe;
            };
        }
    };
});
expanderModule.controller('SomeController',function($scope) {
    $scope.title = '点击展开';
    $scope.text = '这是内部的内容';
});
运行看一下效果,这里我没有用测试框架,而是直接部署在tomcat运行:

效果如下:


说明:directive用来定义指令;原来的expander标签被替换了,这是因为设置了属性replace:true;ng-transclude指令会保留原来标签中的内容,但是同时要设置属性transclude:true;restrict : 'EA',,用来指明标签的声明方式,EA,指明指令声明方式为元素和属性。



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值