新手学angularjs之指令
例子: <!DOCTYPE html>
<html data-ng-app="HelloModule">
<head lang="en">
<meta charset="UTF-8">
<title>Hello指令</title>
<script src="../js/angular.js"></script>
<script src="../js/Hello_Directive.js"></script>
</head>
<body>
<hello></hello>
<div hello></div>
<div class="hello"></div>
<!-- directive:hello -->
<div></div>
</body>
</html>
用到的js代码: var helloModule = angular.module('HelloModule',[]) ;
helloModule.directive('hello',function(){
return{
restrict:'AEMC',template:'<div>Hi body!</div>',replace:true
}
}) ;
最后加载的效果:
restrict:表示匹配模式,它一共有四个选择,分别是“A”、“E”、“M”、“C” →体现匹配模式中的C →体现匹配模式中的M 关于最后一种注释的写法需要注意directive前面和hello后面都是要空格的。
给定一个模板,相比templateUrl,template如果是遇到大量的html模板代码就会比较复杂,而如果用templateUrl只需要将一个定义好的完成的html模板的url路径设置给他就可以了。
Hi Kobe!
’
templateUrl:’hello.html’ template还有一个templateCache var myModule = angular.module('MyModule',[]) ;
myModule.run(function($templateCache){
$templateCache.put("hello.html","<div>Hello Kobe.Bryant!!!!</div>") ;
});
myModule.directive("hello",function($templateCache){
return{
restrict:'AECM',template:$templateCache.get("hello.html"),repalce:true
}
});
元素之间标签是可以嵌套的,用repalce就会将内部显示的内容替换掉. <!DOCTYPE html>
<html data-ng-app="MyModule">
<head lang="en">
<meta charset="UTF-8">
<title></title>
<script src="../js/angular.js"></script>
<script src="../js/replace.js"></script>
</head>
<body>
<hello>
<div>这里是指令内部的内容!</div>
</hello>
</body>
</html>
对应js代码: var myModule = angular.module('MyModule',[]);
myModule.directive("hello",function(){
return {
restrict:"AE",template:"<div>Hello Lebron James</div>",repalce:true
}
});
加载的效果是 var myModule = angular.module('MyModule',[])
myModule.directive('hello',function(){
return{
restrict:"AE",transclude:true,template:"<div>Hello Tracy.McGrady<div ng-transclude></div></div>"
}
});
加载的效果是:
第一个阶段(加载)angularjs需要运行需要等待它加载完成,然后找到ng-app指令,然后就知道自己管理内容的权限。
例子: <!DOCTYPE html>
<html data-ng-app="MyModule">
<head lang="en">
<meta charset="UTF-8">
<title></title>
<script src="../js/angular.js"></script>
<script src="../js/HelloController.js"></script>
</head>
<body>
<div data-ng-controller="MyCtrl">
<loader>滑动加载!</loader>
</div>
</body>
</html>
js代码: var myModule = angular.module('MyModule',[]);
myModule.controller('MyCtrl',['$scope',function($scope){
$scope.loadData=function(){
console.log("数据加载中!");
}
}]);
myModule.directive("loader",link:function(scope,element,attr){
//给元素绑定鼠标的事件
element.bind("mouseenter",function(){
scope.loadData();
}) ;
}
}
});
上面的范例加载的效果是:当鼠标经过的时候后台会打印出内容
将上面的范例做如下的修改 <!DOCTYPE html>
<html data-ng-app="MyModule">
<head lang="en">
<meta charset="UTF-8">
<title></title>
<script src="../js/angular.js"></script>
<script src="../js/HelloController.js"></script>
</head>
<body>
<div data-ng-controller="MyCtrl">
<loader howtoload="loadData()">滑动加载!</loader>
</div>
<div data-ng-controller="MyCtrl2">
<loader howtoload="loadData2()">滑动加载!22222222</loader>
</div>
</body>
</html>
js代码 var myModule = angular.module('MyModule',function($scope){
$scope.loadData=function(){
console.log("数据加载中!");
}
}]);
myModule.controller('MyCtrl2',function($scope){
$scope.loadData2=function(){
console.log("数据加载中!22222222222");
}
}]);
myModule.directive("loader",function(event){
// scope.loadData();
scope.$apply(attr.howtoload);
}) ;
}
}
});
当鼠标在上面移动的时候后台就会打印出对应的信息。
通过内部的controller提供的方法。
例子: <!DOCTYPE html>
<html data-ng-app="Hello2">
<head lang="en">
<meta charset="UTF-8">
<title>Hello指令</title>
<script src="../js/angular.js"></script>
<script src="../js/Hello2.js"></script>
</head>
<body>
<hello></hello>
<hello></hello>
<hello></hello>
<hello></hello>
</body>
</html>
js代码: var helloModule = angular.module('Hello2',template:'<div><input type="text" data-ng-model="userName" />{{userName}}</div>',replace:true
}
}) ;
效果 var helloModule = angular.module('Hello2',scope:{},replace:true
}
}) ;
修改之后,效果如下,再次输入的时候就互相不受影响。
@ :把当前属性作为字符串传递,你还可以绑定来自外层scope的值。 <!DOCTYPE html> <html data-ng-app="MyModule"> <head lang="en"> <meta charset="UTF-8"> <title></title> <link rel="stylesheet" href="../css/bootstrap.css" /> <script src="../js/angular.js"></script> <script src="../js/HelloScope1.js"></script> </head> <body> <div data-ng-controller="MyCtrl" > <drink flavor="{{ctrlFlavor}}"></drink> </div> </body> </html>
js代码 var myModule = angular.module("MyModule",function($scope){
$scope.ctrlFlavor="百威" ;
}]);
myModule.directive("drink",template:"<div>{{flavor}}</div>",attrs){
scope.flavor=attrs.flavor ;
}
}
});
用“@” var myModule = angular.module("MyModule",scope:{
flavor:"@"
},template:"<div>{{flavor}}</div>"
}
});
@绑定传递时字符串。 <!DOCTYPE html>
<html data-ng-app="MyModule">
<head lang="en">
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" href="../css/bootstrap.css" />
<script src="../js/angular.js"></script>
<script src="../js/HelloScope2.js"></script>
</head>
<body>
<div data-ng-controller="MyCtrl" >
控制器里的flavor:
<br>
<input type="text" data-ng-model="ctrlFlavor" />
<br>
指令里的flavor:
<br>
<drink flavor="ctrlFlavor"></drink>
</div>
</body>
</html>
js代码: var myModule = angular.module("MyModule",scope:{
flavor:"="
},template:"<input type='text' data-ng-model='flavor' />"
}
});
最终实现的效果是:修改控制器里的flavor的内容的时候指令里的flavor的内容也跟着修改了。达到了双向绑定的效果。 <!DOCTYPE html>
<html data-ng-app="MyModule">
<head lang="en">
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" href="../css/bootstrap.css" />
<script src="../js/angular.js"></script>
<script src="../js/HelloScope3.js"></script>
</head>
<body>
<div data-ng-controller="MyCtrl">
<greeting greet="sayHello(name)"></greeting>
<greeting greet="sayHello(name)"></greeting>
<greeting greet="sayHello(name)"></greeting>
</div>
</body>
</html>
js代码: var myModule = angular.module("MyModule",function($scope){
$scope.sayHello = function(name){
alert("Hello"+name);
}
}]);
myModule.directive("greeting",scope:{
greet:"&"
},// 这里ng-click中的greet()方法中传递了一个对象,这个对象有一个name属性,这里用“:”把这个userName的值指给它
template:"<input type='text' data-ng-model='userName' /><br>" +
"<button class='btn btn-default' data-ng-click='greet({name:userName})' >Greet</button><br>"
}
});
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- angular ng-messages 表单有效验证注意
- sql-server – Memcached与SQL Server缓存
- vim – 将以下匹配的行移动到文件的顶部
- Docker永远在“Docker正在开始……”的Windows任务中
- angularjs – 如何删除ng-table中已删除的行
- angular – 当md-sidenav-layout内部时,md-toolbar可以固定
- 一键安装LNMP环境,经过Centos 6.0 64位系统测试
- 监控mysql启动情况并检测表错误修复
- Angular 2打字稿到javascript?
- 二、node (Express) Ejs Angular 移动端开发