亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Angular.JS實(shí)現(xiàn)無(wú)限級(jí)的聯(lián)動(dòng)菜單(使用demo)

 更新時(shí)間:2017年02月08日 10:37:25   作者:ralph_zhu  
這篇文章主要介紹了Angular.JS中實(shí)現(xiàn)無(wú)限級(jí)聯(lián)動(dòng)菜單的使用示例,本文是在之前的一篇文章的基礎(chǔ)上進(jìn)行的幾個(gè)demo分享,有需要的朋友可以參考借鑒,下面來(lái)一起看看吧。

前言

之前給大家介紹過(guò)一篇關(guān)于AngularJS中實(shí)現(xiàn)無(wú)限級(jí)聯(lián)動(dòng)菜單的文章,但沒(méi)來(lái)得及和大家分享使用的示例,下面這篇文章就來(lái)給大家分享下幾個(gè)使用的demo。

文中包括demo如下:

1. 同步加載子選項(xiàng)demo

2. 異步加載子選項(xiàng)demo

3. 初始值回填demo

4. 倒金字塔依賴demo

注意:在閱讀本文前請(qǐng)先移步上一篇文章http://chabaoo.cn/article/78126.htm

1. 同步加載子選項(xiàng)

在各聯(lián)動(dòng)菜單加載之前,我們已經(jīng)通過(guò)某種方式(比如后端渲染、api依賴、deferred依賴等等)拿到了渲染各級(jí)菜單所需的各種數(shù)據(jù),我們只需要將該數(shù)據(jù)處理為

[{
text: 'some text',
value: 'some value'
},]

的形式,并封裝成數(shù)據(jù)源函數(shù)即可。以省-市聯(lián)動(dòng)為例:

html部分:

注意第二個(gè)select中聲明了dependents="province" ,以此實(shí)現(xiàn)聯(lián)動(dòng)

<select multi-level-select source="getProvinces" name="province" ng-model="form.province" empty="請(qǐng)選擇省份"></select>
<select multi-level-select source="getCities" name="city" ng-model="form.city" empty="請(qǐng)選擇城市" dependents="province"></select>

controller部分:

預(yù)處理數(shù)據(jù),提供數(shù)據(jù)源函數(shù)

controller('myCtrl', ['$scope', function ($scope) {
 
 // angular使用好習(xí)慣,將primitive值放到對(duì)象上
 var form = {};
 $scope.form = form;
 
 var data = [{
 name: '浙江',
 id: 10,
 cities: [{
  name: '杭州',
  id: 100
 }, {
  name: '寧波',
  id: 101
 }, {
  name: '溫州',
  id: 102
 }]
 }, {
 name: '廣東',
 id: 20,
 cities: [{
  name: '廣州',
  id: 200
 }, {
  name: '深圳',
  id: 201
 }, {
  name: '佛山',
  id: 202
 }]
 }, {
 name: '山東',
 id: 30,
 cities: [{
  name: '濟(jì)南',
  id: 301
 }, {
  name: '青島',
  id: 302
 }, {
  name: '煙臺(tái)',
  id: 303
 }]
 }];
 
 var provinces = [];
 
 var citiesLookup = {};
 
 // 預(yù)處理,返回[{text: 'some text', value: 'some value'},]的數(shù)據(jù)格式
 $.each(data, function (index, province) {
 provinces.push({
  text: province.name,
  value: province.id
 });
 var cities = [];
 $.each(province.cities, function (index, city) {
  cities.push({
  text: city.name,
  value: city.id
  });
 });
 citiesLookup[province.id] = cities;
 });
 
 $scope.getProvinces = function () {
 return provinces;
 };
 
 $scope.getCities = function (values) {
 return citiesLookup[values.province] || [];
 };
 
}]);

2. 異步加載子選項(xiàng)demo

主要差異是數(shù)據(jù)源函數(shù)應(yīng)該返回promise實(shí)例(AngularJS中使用$q即可)。為了演示方便,這里就不用$http了,除了預(yù)處理(由使用者自己的業(yè)務(wù)邏輯負(fù)責(zé))外,完全一樣。

和上一個(gè)例子非常相似,只需要將兩個(gè)數(shù)據(jù)源函數(shù)修改為:

$scope.getProvinces = function () {
 return $q(function (resolve) {
 // 異步時(shí)應(yīng)返回promise,這里就不用http了,除了預(yù)處理(由使用者自己的業(yè)務(wù)邏輯負(fù)責(zé))外,完全一樣
 // 如果需要緩存,也請(qǐng)?jiān)谶@里自己負(fù)責(zé)
 $timeout(function () {
  resolve(provinces);
 }, 100);
 });
};
 
$scope.getCities = function (values) {
 return $q(function (resolve) {
 $timeout(function () {
  resolve(citiesLookup[values.province] || []);
 }, 100);
 });
};

3. 初始值回填

因?yàn)樵陂_(kāi)發(fā)初期這個(gè)需求就很明確了,所以使用上不需要做額外的工作,如果有初始值,只需要在controller中為其賦值即可:

// angular使用好習(xí)慣,將primitive值放到對(duì)象上
var form = {};
$scope.form = form;
form.province = 30;
form.city = 301;

4. 倒金子塔依賴

依賴聲明是通過(guò)由逗號(hào)分割的字符串的形式完成的,使用上非常方便。

設(shè)想以下的場(chǎng)景:

教務(wù)處需要學(xué)生對(duì)課程進(jìn)行評(píng)價(jià),學(xué)生先選擇周幾,再選擇時(shí)間,然后再選擇具體的課程下拉框

周幾和時(shí)間之間互不依賴,課程下拉框同時(shí)依賴于周幾和時(shí)間,換言之,一旦周幾和時(shí)間中的任意一個(gè)改變,課程下拉框就應(yīng)該更新。

html部分:

注意第三個(gè)select的dependents屬性是day,hour,即同時(shí)依賴于day和hour

<select multi-level-select source="getDays" name="day" ng-model="form.day" empty="請(qǐng)選擇周幾"></select>
<select multi-level-select source="getHours" name="hour" ng-model="form.hour" empty="請(qǐng)選擇時(shí)間"></select>
<select multi-level-select source="getCourses" name="course" ng-model="form.course" empty="請(qǐng)選擇課程" dependents="day,hour"></select>

controller部分:

和前面的例子類似,沒(méi)有什么特殊的,預(yù)處理數(shù)據(jù)并提供數(shù)據(jù)源函數(shù)即可。

controller('myCtrl', function ($scope) {
 
 var form = {};
 $scope.form = form;
 
 $scope.getDays = function () {
 var days = '一二三'.split('');
 days.forEach(function (item, index) {
  days[index] = {
  text: '星期' + item,
  value: '星期' + item
  };
 });
 return days;
 };
 
 $scope.getHours = function () {
 return [{
  text: '09:00-12:00',
  value: '1'
 }, {
  text: '14:00-17:00',
  value: '2'
 }];
 };
 
 var courses = {
 '星期一': {
  '1': [{
  value: '數(shù)學(xué)',
  text: '數(shù)學(xué)'
  }, {
  value: '精讀',
  text: '精讀'
  }],
  '2': [{
  value: '足球',
  text: '足球'
  }]
 },
 '星期二': {
  '1': [{
  value: '聽(tīng)力',
  text: '聽(tīng)力'
  }],
  '2': [{
  value: '數(shù)學(xué)',
  text: '數(shù)學(xué)'
  }]
 },
 '星期三': {
  '1': [{
  value: '計(jì)算機(jī)',
  text: '計(jì)算機(jī)'
  }],
  '2': [{
  value: '游泳',
  text: '游泳'
  }, {
  value: '古漢語(yǔ)',
  text: '古漢語(yǔ)'
  }]
 },
 };
 
 $scope.getCourses = function (values) {
 if (!values.day || !values.hour) {
  return [];
 }
 return courses[values.day][values.hour];
 };
});

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流。

相關(guān)文章

  • AngularJS控制器詳解及示例代碼

    AngularJS控制器詳解及示例代碼

    本文主要介紹AngularJS控制器,這里整理了控制器的相關(guān)資料和提供示例代碼及實(shí)例效果圖,有需要的小伙伴可以參考下
    2016-08-08
  • angular.js和vue.js中實(shí)現(xiàn)函數(shù)去抖示例(debounce)

    angular.js和vue.js中實(shí)現(xiàn)函數(shù)去抖示例(debounce)

    這篇文章主要介紹了angular.js和vue.js中實(shí)現(xiàn)函數(shù)去抖示例(debounce),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • Angularjs上傳圖片實(shí)例詳解

    Angularjs上傳圖片實(shí)例詳解

    上傳圖片需要引入插件ngFileUpload,使用bower安裝方法,下面通過(guò)本文給大家介紹Angularjs上傳圖片實(shí)例詳解,希望對(duì)大家有所幫助
    2017-08-08
  • 詳解Angular項(xiàng)目中共享模塊的實(shí)現(xiàn)

    詳解Angular項(xiàng)目中共享模塊的實(shí)現(xiàn)

    本文主要介紹了Angular的共享模塊的實(shí)現(xiàn),對(duì)此感興趣的同學(xué),可以實(shí)驗(yàn)一下
    2021-05-05
  • AngularJS日程表案例詳解

    AngularJS日程表案例詳解

    本文通過(guò)實(shí)例代碼給大家介紹了AngularJS日程表案例詳解,通過(guò)簡(jiǎn)單代碼實(shí)現(xiàn)了添加事件/完成事件/刪除事件功能,具體代碼大家參考下本文
    2017-08-08
  • ionic4+angular7+cordova上傳圖片功能的實(shí)例代碼

    ionic4+angular7+cordova上傳圖片功能的實(shí)例代碼

    ionic是一個(gè)垮平臺(tái)開(kāi)發(fā)框架,可通過(guò)web技術(shù)開(kāi)發(fā)出多平臺(tái)的應(yīng)用。這篇文章主要介紹了ionic4+angular7+cordova上傳圖片功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-06-06
  • AngularJS2中一種button切換效果的實(shí)現(xiàn)方法(二)

    AngularJS2中一種button切換效果的實(shí)現(xiàn)方法(二)

    這篇文章主要介紹了AngularJS2中一種button切換效果的實(shí)現(xiàn)方法(二),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-03-03
  • Angular2里獲?。╥nput file)上傳文件的內(nèi)容的方法

    Angular2里獲?。╥nput file)上傳文件的內(nèi)容的方法

    這篇文章主要介紹了Angular2里獲?。╥nput file)上傳文件的內(nèi)容的方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-09-09
  • Angular父組件調(diào)用子組件的方法

    Angular父組件調(diào)用子組件的方法

    組件是一種特殊的指令,使用更簡(jiǎn)單的配置項(xiàng)來(lái)構(gòu)建基于組件的應(yīng)用程序架構(gòu).這篇文章主要介紹了Angular組件——父組件調(diào)用子組件方法,需要的朋友可以參考下
    2018-04-04
  • angular.fromJson與toJson方法用法示例

    angular.fromJson與toJson方法用法示例

    這篇文章主要介紹了angular.fromJson與toJson方法用法,結(jié)合實(shí)例形式分析了AngularJS使用fromJson與toJson方法進(jìn)行json格式數(shù)據(jù)的解析與轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下
    2017-05-05

最新評(píng)論