JS生成SKU( 深克隆 )

1. angularJs指令及函数

ng-options

ng-options属性可以在表达式中使用数组或对象来自动生成一个select中的option列表。ng-options与ng-repeat很相似,很多时候可以用ng-repeat来代替ng-options。但是ng-options提供了一些好处,例如减少内存提高速度,以及提供选择框的选项来让用户选择。

<!-- item.id 作为value item.name作为文本显示 -->
<!-- <option value="">xxx</option> -->
<select class="form-control" ng-model="entity.goods.category1Id" ng-options="item.id as item.name for item in itemCat1List"></select>
$watch

$watch方法用于监控某个变量的值,当被监控的值发生变化,就自动执行相应的函数。

//读取二级分类
//newValue 为监控的变量变化后的值 oldValue为监控的变量变化前的值
$scope.$watch('entity.goods.category1Id', function(newValue, oldValue) {          
    	//根据选择的值,查询二级分类
    	itemCatService.findByParentId(newValue).success(
    		function(response){
    			$scope.itemCat2List=response; 	    			
    		}
    	);    	
}); 

2. js逻辑代码

[{“attributeName”:”规格名称”,”attributeValue”:[“规格选项1”,“规格选项2”… ] } , … ]

需求 : 查询json数组中是否有包含某个key value的对象

//从集合中按照key查询对象
//list [{“attributeName”:”规格名称”,”attributeValue”:[“规格选项1”,“规格选项2”.... ]  } , ....  ]
//key attributeName
//keyValue "规格名称"
$scope.searchObjectByKey=function(list,key,keyValue){
    //首先遍历数组,得到每一个对象
    for(var i=0;i<list.length;i++){
        //判断对象中的key对应的value是否是传入keyValue
        if(list[i][key]==keyValue){
            //如果是 就返回这个对象
            return list[i];
        }			
    }		
    return null;
}

需求 : 更新json数组的某个对象的属性

[ {“attributeName”:“网络”,“attributeValue”:[“移动4G”,“联通4G”,“电信4G”]},
{“attributeName”:“机身内存”,“attributeValue”:[“32G”,“128G”]},
{“attributeName”:“手机屏幕尺寸”,“attributeValue”:[“4.5寸”]}]

在这里插入图片描述

//entity对象中 goodsDesc是json对象,这个对象有json数组的属性specificationItems
$scope.entity={goodsDesc:{specificationItems:[]}};
//点击多选框时,触发这个方法
//$event angularJs提供的指令,获取当前dom对象
//name 网络/机身内存/手机屏幕尺寸...
//value 移动4G/32G/4.5寸...
$scope.updateSpecAttribute=function($event,name,value){
    //判断specificationItems是否已经存储了attributeName为name的对象
    var object= $scope.searchObjectByKey(
        $scope.entity.goodsDesc.specificationItems ,'attributeName', name);		
    //如果存在
    if(object!=null){
        //判断多选框是选中还是取消选中
        if($event.target.checked ){
            //选中则在这个对象的attributeValue这个属性中添加元素
            object.attributeValue.push(value);		
        }else{//取消勾选				
            object.attributeValue.splice( object.attributeValue.indexOf(value ) ,1);//移除选项
            //如果选项都取消了,将此条记录移除
            if(object.attributeValue.length==0){
                $scope.entity.goodsDesc.specificationItems.splice(
                    $scope.entity.goodsDesc.specificationItems.indexOf(object),1);
            }				
        }
    }else{
        //如果不存在 添加一个新的对象到specificationItems中
        $scope.entity.goodsDesc.specificationItems.push(
            {"attributeName":name,"attributeValue":[value]});
    }		
}

3.js生成SKU列表(深克隆)

在这里插入图片描述

生成数据和勾选哪个选项无关,每次勾选都根据勾选结果重新生成列表数据

需求 :根据勾选结果去生成列表

[ {“attributeName”:“网络”,“attributeValue”:[“移动4G”,“联通4G”,“电信4G”]},
{“attributeName”:“机身内存”,“attributeValue”:[“32G”,“128G”]},
{“attributeName”:“手机屏幕尺寸”,“attributeValue”:[“4.5寸”]}]

上一次生成的列表和本一次规格生成新的列表

for(循环规格){

新的列表=生成(上次一次的列表,本一次的规格)

}

//深克隆
//定义一个jsona
var jsona = {price:0,num:99999,status:1,isDefault:0}
//把jsona转化为json字符串
JSON.stringify(jsona)//可以得到json字符串  '{price:0,num:99999,status:1,isDefault:0}'

//把json字符串转为json对象赋值给jsonb
var jsonb = JSON.parse(JSON.stringify(jsona))
//创建SKU列表
$scope.createItemList=function(){
    //每次勾选多选框都触发这个方法,itemList都重新初始化
    $scope.entity.itemList=[{spec:{},price:0,num:99999,status:'0',isDefault:'0' } ];//初始
    var items=  $scope.entity.goodsDesc.specificationItems;	
    for(var i=0;i< items.length;i++){
        //循环得到每一个item对象
        //{"attributeName":"网络","attributeValue":["移动4G","联通4G","电信4G"]}
        $scope.entity.itemList = addColumn( $scope.entity.itemList,items[i].attributeName,items[i].attributeValue );    
    }	
}
//添加列值 
//list $scope.entity.itemList
//columnName  网络
//columnValues ["移动4G","联通4G","电信4G"]
addColumn=function(list,columnName,columnValues){
    var newList=[];//新的集合
    for(var i=0;i<list.length;i++){
        //list中的每一个对象,每一条SKU
        var oldRow= list[i];
        //给当前SKU添加规格
        for(var j=0;j<columnValues.length;j++){
            var newRow= JSON.parse( JSON.stringify( oldRow )  );//深克隆
            newRow.spec[columnName]=columnValues[j];
            newList.push(newRow);
        }    		 
    } 		
    return newList;
}

最终生成的json数据

"itemList":
[
	{"spec":{"网络":"移动4G","机身内存":"32G","手机屏幕尺寸":"4.5寸"},
	 "price":"4599",
	 "num":"888",
	 "status":"1",
	 "isDefault":"0"},
    {"spec":{"网络":"移动4G","机身内存":"128G","手机屏幕尺寸":"4.5寸"},
			 "price":"5399",
			 "num":"888",
			 "status":"1",
			 "isDefault":"1"},...
 ]
  
    
"items":
[   
    {"attributeName":"网络","attributeValue":["移动4G","联通4G","电信4G"]},
    {"attributeName":"机身内存","attributeValue":["32G","128G"]},
    {"attributeName":"手机屏幕尺寸","attributeValue":["4.5寸"]}
]
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Vue是一种流行的JavaScript框架,用于构建用户界面。在使用Vue生成SKU组合table时,我们可以遵循以下步骤: 1. 定义数据结构:首先,我们需要定义用于存储SKU组合的数据结构。可以使用一个数组或对象来存储组合的属性值,如颜色、尺寸等。 2. 生成组合:通过循环嵌套的方式,生成所有可能的SKU组合。将组合的属性值存储在定义的数据结构中。 3. 渲染表格:使用Vue的数据绑定功能,在HTML模板中渲染SKU组合的表格。可以使用v-for指令来循环遍历组合数据结构,并将组合的属性值显示在表格中的对应单元格中。 4. 添加事件处理:如果需要在表格中的某个单元格中添加按钮或其他交互元素,可以使用Vue的事件绑定功能。可以监听按钮点击事件,并执行相应的操作。 5. 样式设计:通过CSS样式对表格进行美化或自定义设计,使其符合项目或产品的需求。 总之,使用Vue生成SKU组合表格的关键是定义合适的数据结构,将生成的组合存储起来,并使用Vue的数据绑定和事件绑定等功能实现表格的渲染和交互设计。这样,我们就可以方便地生成和展示SKU组合表格。 ### 回答2: Vue生成SKU组合Table是指根据一组已知的属性值,生成所有可能的SKU组合,并以Table的形式展示出来。在Vue中,可以通过使用v-for指令来实现此功能。 首先,需要定义一个包含属性和属性值的数据结构,例如: ```javascript data() { return { properties: [ { name: '颜色', values: ['红色', '蓝色', '黄色'] }, { name: '尺寸', values: ['S', 'M', 'L'] }, // 其他属性... ], skus: [] // 用于存储生成的所有SKU组合 } }, ``` 然后,可以使用嵌套的v-for指令来生成所有可能的SKU组合,并将其存储在skus数组中: ```javascript methods: { generateSKUCombinations() { const properties = this.properties; const combinations = properties.reduce((acc, property) => { if (!acc.length) { return property.values.map(value => ({ [property.name]: value })); } const newCombinations = []; property.values.forEach(value => { acc.forEach(combination => { newCombinations.push({ ...combination, [property.name]: value }); }); }); return newCombinations; }, []); this.skus = combinations; } }, ``` 最后,在Vue的模板中,可以使用表格标签和v-for指令来展示生成SKU组合: ```html <table> <tr> <th v-for="property in properties" :key="property.name">{{ property.name }}</th> <th>SKU编码</th> </tr> <tr v-for="sku in skus" :key="sku"> <td v-for="(value, name) in sku" :key="name">{{ value }}</td> <td>{{ generateSKUCode(sku) }}</td> </tr> </table> ``` 在上述模板中,properties的v-for指令用于生成表头,skus的v-for指令用于生成表格内容。另外,可以通过generateSKUCode方法来生成每个SKU组合的编码。 以上就是使用Vue生成SKU组合Table的方法。 ### 回答3: Vue生成SKU组合table是一种常用的电商商品规格选择的实现方式。在电商网站中,商品往往有多个规格可选,比如颜色、尺寸、款式等。而SKU(Stock Keeping Unit)是指商品的唯一标识,每个SKU对应一个具体的商品。生成SKU组合table的目的是为了方便用户选择商品规格,同时展示所有可选的规格组合。 在Vue中实现这个功能,可以采用动态生成表格的方式。首先,需要在Vue的data中定义商品规格的数组,每个规格都包含一个唯一标识和多个选项。然后,在页面中使用v-for指令遍历规格数组,生成规格的选择区域。 当用户选择了某个规格的选项后,需要根据已选择的规格生成SKU组合。可以使用computed属性来实时计算已选择的规格组合。根据已选择的规格,使用v-for指令遍历SKU数组,生成SKU组合的表格。 在生成表格的同时,可以将每个SKU的唯一标识作为value绑定到checkbox或者radio的input上。这样,用户选择某个具体的SKU时,可以通过v-model获取到所选SKU的值。 最后,可以通过监听选择规格的change事件,动态更新已选择的规格组合和SKU表格。当用户选择了所有的规格后,可以添加一个添加购物车或立即购买的按钮,将所选SKU加入购物车或跳转到下一步的支付页面。 这样,通过Vue生成SKU组合table,既方便用户选择商品规格,同时也提升了用户体验。同时,通过动态生成表格的方式,可以适应不同商品的规格数量和种类,具有较好的灵活性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值