上次聯(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"><</option>
<option value="1">=</option>
<option value="2">></option>
</select>
{{views.data_range}}
<input type="text">
</div>
</div>