视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Angularjs实现下拉框联动的示例代码
2020-11-27 22:31:54 责编:小采
文档


第一种联动方式,在网上看到的,感觉对于我的使用性不高,比较后端不会提供这种json。。

实现截图

html

 <select ng-model="s1" ng-options="selectData.name for selectData in selectDatas">
 <option value="">--产品类目--</option>
 </select>
 <select ng-model="s2" ng-options="util.name for util in s1.utils">
 <option value="">--产品类型--</option>
 </select>

js

 $scope.selectDatas = [{
 code: 01,
 name: "监控安全类",
 utils: [
 { code: 0101, name: "遥控门锁" },
 { code: 0102, name: "声光报警器" },
 { code: 0103, name: "摄像头" }
 ]
 },
 {
 code: 02,
 name: "大家电",
 utils: [
 { code: 0201, name: "空调" },
 { code: 0202, name: "洗衣机" },
 { code: 0203, name: "洗碗机" }
 ]
 }
 ]

第二种联动方式,这次是根据后台要求,自己写的一个联动,当然没有请求接口,就是单独写个固定值

1.联动的思路

1.首先是选择总类别
2.总类别选择后,会关联出设备
3.设备选择后,会关联出属性
4.属性选择后,会根据属性的不同,关联出不同的项目

2.代码

1)设备类别下拉

html

<select ng-model="devicetype" ng-options="x.category for x in devices" ng-change="changeType(devicetype)">
 <option value="">--设备--</option>
</select>

js

$scope.devices = [
 {"category":"大家电"},
 {"category":"红外感应"},
 {"category":"监控"},
 {"category":"灯光"},
]
// 根据大类来获取设备列表
$scope.changeType = function(x){
 $log.log(x.category)
 //TODO: 真正使用肯定是要用$http来请求设备列表
 //暂时测试使用下面的
 switch(x.category){
 case "大家电":
 $scope.yourdevices = [
 {"dev":"电视机(mac:32309fsaf)"},
 {"dev":"洗衣机(mac:32309fsaf)"},
 {"dev":"冰箱(mac:32309dqsq)"},
 {"dev":"空调(mac:32309fsaf)"}
 ];
 break;
 }
}

2)设备下拉

html

<select ng-model="yourdevice" ng-options="x.dev for x in yourdevices" ng-change="changeDev(yourdevice)">
 <option value="">--你的设备--</option>
</select>

js

$scope.changeDev = function (x) {
 $log.log(x.dev)
 switch (x.dev) {
 case '电视机(mac:32309fsaf)':
 $scope.params = [
 {
 'display_name': '开关',
 'data_type': 'bool',
 'data_range': [ '开','关']
 },
 {
 'display_name': '温度',
 'data_type': 'num',
 'data_range': [30]
 }
 ]
 //此处将json转换成对象,方便下面的属性相关操作,例如“开关”属性,要找去其相关的类型数据和值
 var paramsarr = $scope.params;
 var paramobj = {
 };
 paramsarr.forEach(function (v, i) {
 paramobj[v.display_name] = v;
 })
 $scope.paramobjs = paramobj;
 }
}

3)属性下拉

html

<select ng-model="param" ng-options="p.display_name for p in params" ng-change="changeParam(param.display_name)">
 <option value="">--属性--</option>
</select>

js

//获取数据类型和数据值
$scope.changeParam = function (x) {
 var pobj = $scope.paramobjs;
 $scope.views = pobj[x];
 $scope.type = $scope.views.data_type
 $log.log($scope.views)
}

4)属性项

html

使用ng-swtch来进行判断显示,若数值类型位bool,则显示单选框,若数值类型位num,则显示位大小比较下拉框和文本框

<div ng-switch="type">
 <div ng-switch-when="bool" style="margin: -20px auto auto 90px;">
 <label ng-repeat="x in views.data_range">
 <input type="radio" name="radio" value="{{x}}">{{x}}
 </label>
 </div>
 <div ng-switch-when="num" style="margin: -20px auto auto 90px;">
 <select ng-model="compare">
 <option value="0"><</option>
 <option value="1">=</option>
 <option value="2">></option>
 </select>
 {{views.data_range}}
 <input type="text">
 </div>
 </div>

3.实现效果

下载本文
显示全文
专题