Angularjs下拉聯(lián)動(2)

上次聯(lián)動的代碼是在網(wǎng)上看到的,可能無法實(shí)現(xiàn)我的要求
這次是根據(jù)后臺要求,自己寫的一個聯(lián)動,當(dāng)然沒有請求接口,就是單獨(dú)寫個固定值
演示地址:http://runjs.cn/detail/dta6edch
演示只提供了第一個選項的聯(lián)動,后面沒寫,最后的屬性“開關(guān)”和“溫度”都寫了,為了突出不同

1.聯(lián)動的思路

  • 1.首先是選擇總類別
  • 2.總類別選擇后,會關(guān)聯(lián)出設(shè)備
  • 3.設(shè)備選擇后,會關(guān)聯(lián)出屬性
  • 4.屬性選擇后,會根據(jù)屬性的不同,關(guān)聯(lián)出不同的項目

2.代碼

1)設(shè)備類別下拉

html

<select ng-model="devicetype" ng-options="x.category for x in devices" ng-change="changeType(devicetype)">
    <option value="">--設(shè)備--</option>
</select>

js

$scope.devices = [
     {"category":"大家電"},
         {"category":"紅外感應(yīng)"},
     {"category":"監(jiān)控"},
     {"category":"燈光"},
]
// 根據(jù)大類來獲取設(shè)備列表
$scope.changeType = function(x){
    $log.log(x.category)
    //TODO: 真正使用肯定是要用$http來請求設(shè)備列表
    //暫時測試使用下面的
    switch(x.category){
    case "大家電":
            $scope.yourdevices = [
                {"dev":"電視機(jī)(mac:32309fsaf)"},
                {"dev":"洗衣機(jī)(mac:32309fsaf)"},
                {"dev":"冰箱(mac:32309dqsq)"},
                {"dev":"空調(diào)(mac:32309fsaf)"}
            ];
            break;
    }
}

2)設(shè)備下拉

html

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

js

$scope.changeDev = function (x) {
  $log.log(x.dev)
  switch (x.dev) {
    case '電視機(jī)(mac:32309fsaf)':
      $scope.params = [
        {
          'display_name': '開關(guān)',
          'data_type': 'bool',
          'data_range': [ '開','關(guān)']
        },
        {
          'display_name': '溫度',
          'data_type': 'num',
          'data_range': [30]
        }
      ]
      //此處將json轉(zhuǎn)換成對象,方便下面的屬性相關(guān)操作,例如“開關(guān)”屬性,要找去其相關(guān)的類型數(shù)據(jù)和值
      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

//獲取數(shù)據(jù)類型和數(shù)據(jù)值
$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來進(jìn)行判斷顯示,若數(shù)值類型位bool,則顯示單選框,若數(shù)值類型位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">&lt;</option>
                <option value="1">=</option>
                <option value="2">&gt;</option>
            </select>
            {{views.data_range}}
            <input type="text">
        </div>
    </div>

3.實(shí)現(xiàn)效果

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,523評論 25 708
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,252評論 4 61
  • 最近在寫Swift程序的時候,有個問題讓人難以理解,如下,上代碼,哥本就是這么一個直接的人,沒有什么能阻擋偶滴步伐...
    Dancer那么帥閱讀 1,773評論 3 2
  • 為什么大家有時不喜歡經(jīng)濟(jì)學(xué)家,覺得他們得出的結(jié)論與我們的意愿相違背,毀三觀、大跌眼鏡,其原因在于觀察的空間和維度不...
    君利閱讀 207評論 1 4
  • 這兩日,都在忙一些突擊性的工作,忙忙碌碌,卻也井然有序,很充實(shí)。 其實(shí),從前,我一直是個急性子,加上又有點(diǎn)強(qiáng)迫癥,...
    迷糊的謎閱讀 331評論 0 0