前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Angularjs下拉联动(2)

Angularjs下拉联动(2)

作者头像
治电小白菜
发布2020-08-25 14:39:31
发布2020-08-25 14:39:31
1.5K00
代码可运行
举报
文章被收录于专栏:技术综合技术综合
运行总次数:0
代码可运行

上次联动的代码是在网上看到的,可能无法实现我的要求 这次是根据后台要求,自己写的一个联动,当然没有请求接口,就是单独写个固定值 演示地址:http://runjs.cn/detail/dta6edch 演示只提供了第一个选项的联动,后面没写,最后的属性“开关”和“温度”都写了,为了突出不同

1.联动的思路

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

2.代码

1)设备类别下拉

html

代码语言:javascript
代码运行次数:0
运行
复制
<select ng-model="devicetype" ng-options="x.category for x in devices" ng-change="changeType(devicetype)">
    <option value="">--设备--</option>
</select>

js

代码语言:javascript
代码运行次数:0
运行
复制
$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

代码语言:javascript
代码运行次数:0
运行
复制
<select ng-model="yourdevice" ng-options="x.dev for x in yourdevices" ng-change="changeDev(yourdevice)">
    <option value="">--你的设备--</option>
</select>

js

代码语言:javascript
代码运行次数:0
运行
复制
$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

代码语言:javascript
代码运行次数:0
运行
复制
<select ng-model="param" ng-options="p.display_name for p in params" ng-change="changeParam(param.display_name)">
    <option value="">--属性--</option>
</select>

js

代码语言:javascript
代码运行次数:0
运行
复制
//获取数据类型和数据值
$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,则显示位大小比较下拉框和文本框

代码语言:javascript
代码运行次数:0
运行
复制
<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">&lt;</option>
                <option value="1">=</option>
                <option value="2">&gt;</option>
            </select>
            {{views.data_range}}
            <input type="text">
        </div>
    </div>

3.实现效果

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.联动的思路
  • 2.代码
    • 1)设备类别下拉
    • 2)设备下拉
    • 3)属性下拉
    • 4)属性项
  • 3.实现效果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档