AngularsJS自定义指令

<!DOCTYPE html>
<html>
	<head>
		<meta charset=utf-8>
		<meta name=description content="">
		<meta name=viewport content="width=device-width, initial-scale=1">
		<title></title>
		<script src="../js/angular.min.js"></script>
	</head>
	<body ng-app="myApp" >
		<!-- 调用-->
		<runoob-directive></runoob-directive>
		
		<script>
		var app = angular.module("myApp", []);
		app.directive("runoobDirective", function() {
		return {
		template : "<h2>自定义指令!</h2>"
		};
		});
		</script>

	</body>
</html>

AngularJS使用 .directive 函数来添加自定义的指令,使用驼峰法来命名一个指令, runoobDirective, 但在使用它时需要以 - 分割, runoob-directive:

AngularJS可以通过以下方式来调用指令:

  • 元素名     <runoob-directive></runoob-directive>
  • 属性 <div runoob-directive></div>
  • 类名 <div class="runoob-directive"></div>
  • 注释 <!-- directive: runoob-directive -->
  • 限制使用方式
通过添加 restrict 属性,并设置只值为 "A", 来设置指令只能通过属性的方式来调用:

restrict 值可以是以下几种:

  • E 作为元素名使用
  • A 作为属性使用
  • C 作为类名使用
  • M 作为注释使用
var app = angular.module("myApp", []);
app.directive("runoobDirective", function() {
    return {
        restrict : "A",
        template : "<h1>自定义指令!</h1>"
    };
});

<body ng-app="myApp" ng-controller="mike">
		<input type="text" ng-model="name"/><br>
		<second/>
		<script>
		angular.module('myApp', []).directive('first', [ function(){
		return {
		// scope: false, // 默认值,共享父级作用域
		// controller: function($scope, $element, $attrs, $transclude) {},
		restrict: 'AE', // E = Element, A = Attribute, C = Class, M = Comment
		template: 'first name:{{name}}',
		};
		}]).directive('second', [ function(){
		return {
		scope: true, // 继承父级作用域并创建指令自己的作用域
		// controller: function($scope, $element, $attrs, $transclude) {},
		restrict: 'AE', // E = Element, A = Attribute, C = Class, M = Comment
		//当修改这里的name时,second会在自己的作用域中新建一个name变量,与父级作用域中的
		// name相对独立,所以再修改父级中的name对second中的name就不会有影响了
		template: 'second name:{{name}}',
		};
		}]).directive('third', [ function(){
		return {
		scope: {}, // 创建指令自己的独立作用域,与父级毫无关系
		// controller: function($scope, $element, $attrs, $transclude) {},
		restrict: 'AE', // E = Element, A = Attribute, C = Class, M = Comment
		template: 'third name:{{name}}',
		};
		}])
		.controller('mike', ['$scope', function($scope){
		$scope.name="张三";
		}]);
		</script>
	</body>

1. 当同时调用first和second时,只有first生效,两个template不会同时出现。

2. 当设置了 scope:{} 之后,{{name}}获取不到了,原因就是作用域的问题,想要设置这里的name的值,可以再加一个controller的字段。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

让程序飞

您的鼓励将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值