angularjs博客的制作(一)
更新日期:
这个系列希望通过一个博客的例子,介绍下angular的大部分使用方法。当然会介绍的比较浅,属于入门级别的。本篇是系列第一部分,实现列表功能。
html代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | <!doctype html> <html ng-app=posts> <head> <meta charset="utf-8"> <script src="angular.js"></script> <script type="text/javascript"> var Post = angular.module('posts',[]); Post.controller('postCtrl', ['$scope', function($scope) { $scope.list = [{ title:"好无聊啊!!!", content:"今天好无聊!!" },{ title:"生日了!!!", content:"今天生日啦!!!!" }]; }]); </script> </head> <body> <div ng-app="posts"> <h2>文章列表</h2> <div ng-controller="postCtrl"> <ul class="list"> <li ng-repeat="post in list"> <span style="color:#000;font-size:20px;">{{post.title}}</span> <div>{{post.content}}</div> </li> </ul> </div> </div> </body> </html> |
看起来还是很简单的吧
我们一个个来看
首先注意到 21行 <div ng-app="posts">
之前讲过了 ng-app 代表项目开始遍历的根节点。这边后面跟了个 posts,这是什么意思呢? 这边的posts被称之为 moudel,模块的概念。angular模块式很重要的概念,这边先不展开讲。只要知道 当前的页面应用都被这个叫posts的模块来管理就行了。
我们再看看js代码 第7行 var Post = angular.module('posts',[]);
这边就是生成了一个新的模块了,也就是之前ng-app引用的模块。后面的[]可以引用依赖的其他模块。
第9行 Post.controller('postCtrl', ['$scope', function($scope) {
是比较重要的一个环节,模块具有controller方法用于生成一个控制器。$scope对象可以理解为当前的执行环境,在这个上面注册的数据(属性值,方法)都可以直接在模板里面使用{{}}引用。可能有人对这边的这种 ['$scope', function($scope) {
写法不理解,实际上那段代码可以写成下面这样:
1 2 3 4 5 6 7 8 9 | Post.controller('postCtrl', function($scope) { $scope.list = [{ title:"好无聊啊!!!", content:"今天好无聊!!" },{ title:"生日了!!!", content:"今天生日啦!!!!" }]; }); |
angular会自动将当前的$scope注入到当前的控制器的函数里。angular必须确保你的参数名是$scope才能正确的注入,而一些打包压缩工具会自作聪明的自动的把函数的参数替换称a,b这些。所以稳妥的做法是这样写,['$scope', function(任何名字) {
这样angular会通过数组第一个名字去注入你的参数。
接下来看23行,使用了ng-controller="postCtrl"
声明当前节点的子节点都使用 postCtrl这个控制器。
25行 ng-repeat="post in list"
显而易见就是个遍历器 类似for in的写法输出数据。
整个列表页就这样完成了。
下面我们增加搜索的功能。我们只需要修改点html就行了。
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <body> <div ng-app="posts"> <h2>文章列表</h2> <div ng-controller="postCtrl"> <input type="text" ng-model="search" class="search" placeholder="Search"> <ul class="list"> <li ng-repeat="post in list | filter:search"> <span style="color:#000;font-size:20px;">{{post.title}}</span> <div>{{post.content}}</div> </li> </ul> </div> </div> </body> |
第5行 我们增加了一个 input,将它的值绑定到当前环境对象$scope上。然后在ng-repeat 后面的表达式上加上 | filter:search
告诉angular这边根据search值的变化而进行筛选。很好理解吧。
至此基本的列表功能完成,下章开始 增加增删改的功能。
我们再增加些简单的css,最后的代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | <!doctype html> <html > <head> <meta charset="utf-8"> <script src="angular.js"></script> <script type="text/javascript"> var Post = angular.module('posts',[]); Post.controller('postCtrl', ['$scope', function($scope) { $scope.list = [{ title:"好无聊啊!!!", content:"今天好无聊!!" },{ title:"生日了!!!", content:"今天生日啦!!!!" }]; }]); </script> <style type="text/css"> .wrap{ margin: 0 auto; width: 500px; } .search{ border-radius: 5px; border: 1px solid #999; width: 200px; } .list{ width: 200px; padding-left: 0px; } .list li{ list-style: none; margin-bottom: 20px; color: #000; width: 300px; } .list li span{ color: #666; font-size: 16px; font-weight: bold; } .list li div{ padding-top: 10px; color: #999; font-size: 14px; } </style> </head> <body> <div class="wrap" ng-app="posts"> <h2>文章列表</h2> <div ng-controller="postCtrl"> <input type="text" ng-model="search" class="search" placeholder="Search"> <ul class="list"> <li ng-repeat="post in list | filter:search"> <span style="color:#000;font-size:20px;">※{{post.title}}</span> <div>{{post.content}}</div> </li> </ul> </div> </div> </body> </html> |