电商四十七、修改模板及JSON.parse()的使用

①分析为什么要用JSON.parse()。

一、找到调用$scope.findOne()方法的按钮。

二、在前端的控制层(controller层)找到$scope.findOne(  )方法。

三、在前端的服务层(service层)找到typeTemplateService.findOne($scope.entity03)对应的内容。

四、通过前端服务层(service层)得到typeTemplateService.findOne($scope.entity03)对应的内容:$http.post(.........)

与后端交互。找到后端控制层(controller层)。通过:"../typeTemplate/findOne.do"即找到 @RequestMapping("findOne")@RequestMapping("/typeTemplate"),即在类文件TypeTemplateController.java中找。

返回类型是类TbTypeTemplate.java

因为数据库里面的类型是varchar类型,所以对应String类型。

 typeTemplateController.js文件中的一段内容:

 $scope.findOne = function($event){
                $scope.entity03= {id: $event.target.parentNode.parentNode.children[1].innerText};
                typeTemplateService.findOne($scope.entity03).success(
                        function(response){
                            $scope.entity = response;
                        }
                    );
            }

 $scope.entity = response;

其中response里面对应的idLong类型namespecIdsbrandIdscustomAttributeItems都是String类型。而不是集合(数组)类型。

所以$scope.entity.idLong类型。$scope.entity.name $scope.entity.specIds$scope.entity.brandIds$scope.entity.customAttributeItems都是String类型,而不是集合(数组)类型。

但是我们在定义的时候,将entity定义成{id:数字,name:字符串,specIds:[ 集合(数组) ],brandIds:[ 集合(数组)],customAttributeItems:[ 集合(数组) ]}

angularjs中的变量entityname是定义成字符串,但是数据库中带[ ]varchar类型angularjs变量中定义成集合(数组)。在存储(新建保存和修改保存)到后端和数据库的时候,自动将angularjs的变量转换成对应类,此处是类TbTypeTemplate.java。即保存数据到数据库时,自动将前端的集合(数组)类型,如格式是[  ],的数据转换成类TbTypeTemplate.java中对应数据类型,如String类型。

上面的$scope.entity里面的内容是:{id:数字,name:字符串,specIds:[  集合(数组)],brandIds:[  集合(数组)],customAttributeItems:[  集合(数组)]},在保存的时候,如下:

entity06entity07就是$scope.entity

从上面的后端代码,可以看出,前端传给后端的时候,即entity06entity07都是TbTypeTemplate.java类的类型。前端自动将传入的参数$scope.entity中的id转换成对应的Long类型,name转换成对应的String类型specIdsbrandIdscustomAttributeItemsangularjs集合(数组)类型转换成对应的TbTypeTemplate.java类String类型,然后以对应的类型存到数据库中。数据库中:类中Long类型idbigint类型类中String类型namespecIdsbrandIdscustomAttributeItems数据库为varchar类型(但是specIdsbrandIdscustomAttributeItems在前端的angularjs中定义成了集合(数组)类型)。

存储的时候,集合(数组)类型自动转换成String类型。

注意:ng-model和select2-model绑定的变量值,要显示后端数据库的值,数据库中带[  ]数据的字符串(String)类型即varchar类型必须要转换成集合(数组)形式!!!

如下:entity.id不用绑定,主键自增长形式。不用绑定。其余要绑定。

要想ng-modelselect2-model绑定的值显示,则entity中带[  ]的数据内容要是集合(数组)类型,不能是字符串(String)类型。但是:

再前面已经对返回类型为TbTypeTemplate.java进行分析,response$scope.entitynamespecIdsbrandIdscustomAttributeItems是String类型。ng-modelselect2-model,对带有[ ]String类型不能显示。需要转换成集合(数组)形式,angularjs绑定变量时,ng-modelselect2-model需要将带有[ ]String类型的数据转换成集合(数组)形式,才能显示。

findOne方法,response返回TbTypeTemplate.java类型,所以:

$scope.entity={id:数字,name:“字符串”,specIds:“带[  ]的字符串”,brandIds:“带[  ]的字符串”,customAttributeItems:“带[  ]的字符串”};

要让angularjs绑定变量时,ng-modelselect2-model需要将带有[ ]String类型的数据转换成集合(数组)形式,才能显示。

如何转换String类型到对应的angularjs变量集合(数组)类型:用JSON.parse(“带[  ]的字符串”);否则点击修改按钮后只显示name不显示关联品牌关联规格扩展属性

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值