《AngularJS高级程序设计》之一:动态分类

学习AngularJS框架,读了一本书,名字是《AngularJS高级程序设计》,讲的很仔细,解决了不少之前的疑问。以下是实例分析。 主要学习思考以下方法:1如何实现动态分类 考虑:左边一列要表示出分类列表,右边一列是分类详情。以下是给出对象数组。 $scope.data={products:[{name:’product1’,description:’A’,category:’cat1’,price:’100’}, {name:’product2’,description:’B’,category:’cat2’,price:’200’}, {name:’product3’,description:’C’,category:’cat3’,price:’300’}, {name:’product4’,description:’D’,category:’cat4’,price:’400’}]} 核心思想:使用过滤器根据产品的对象数组生成唯一的分类名列表
angular.module('customFilter',[])
   .filter('customFilter', function () {
       return function (data,propertyName) {
           if(angular.isArray(data)&&angular.isString(propertyName)){
               var result = [];
var key={};
               for (var i = 0; i < data.length; i++) {
                   var obj = data[i][propertyName];
if(angular.isUnderfined(key[obj])){
    key[obj]=true;
                        result.push(obj);}
               }
               return result;
           }
       }
    })
这里是创建了一个新模块,’customFilter’,过滤器名称为’customFilter’,返回一个工人函数,接收的参数是对象数组的一个对象和对象的类名。循环遍历得到对象数组的每一个类名属性值,放入result数组中。 这里让人佩服一点是,作者想到了建立一个对象,然后将属性作为key,属性值设为true。保证了属性值的唯一性。 在视图部分是这样写的: 左边视图就可以完全展示出来了。但是还需要在左边加了单击事件的方法。 ![这里写图片描述](https://img-blog.csdn.net/20161025161508818) 下一个效果,点击左边分类HOME时,显示首页,分别点击每一个分类时,显示相关的分类信息。。。。

视图层:使用Angular内置的过滤器filter,处理集合并选择包含的对象子集。

再下一个:点击哪个按钮需要一个视觉反馈吧,如下图所示
这里写图片描述
在html文件上使用ng-class指令ng-class=”getCaClass(item)”,在控制器上写入以下代码

angular.module(‘sportshop’)
.constant(“activaClass”,”btn-primary”)
.controller(‘productCtrl’, function ( scope, filter,activaClass) {
var selectedCatory = null;
scope.selectC=function(newCatory)selectedCatory=newCatory;$scope.selectPage=1;; scope.selectFn = function (product) {
return selectedCatory==null || product.category == selectedCatory;
}
$scope.getCaClass= function (newCatory) {
return selectedCatory == newCatory? activaClass:”;
}
});
值得学习的一点是,作者不想在行为代码中嵌入类名,使用Module对象的constant方法定义了定值activaClass(在点击Home时,newCatory为null,与selectedCatory相等,也可实现效果)
下一篇写:2如何实现分页?看看大牛作者是何种思路?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值