<html lang="en" xmlns="http://www.w3.org/1999/xhtml"> <head> <meta charset="utf-8" /> <title>angular directive 連動選單</title> <script src="../Scripts/angular.min.js"></script> <script> var app = angular.module('myApp', []); // directive app.directive('categorySelection', function ($http) { var _template = '<div>' + // 第一分類 '<select class="category-first form-control" ng-model="selectedCategory.first">' + '<option value="0">--第一分類--</option>' + '<option ng-repeat="f in categorySelection.firsts" value="{{f.Id}}">{{f.Text}}</option>' + '</select>' + // 第二分類 '<select class="category-second form-control" ng-model="selectedCategory.second">' + '<option value="0">--第二分類--</option>' + '<option ng-repeat="s in categorySelection.seconds" value="{{s.Id}}">{{s.Text}}</option>' + '</select>' + // 第三分類 '<select class="category-third form-control" ng-model="selectedCategory.third">' + '<option value="0">--第三分類--</option>' + '<option ng-repeat="t in categorySelection.thirds" value="{{t.Id}}">{{t.Text}}</option>' + '</select>' + '</div>'; return { restrict: 'E', scope: { first: '=', // 第一分類, 用"等於"符號做雙向綁定 second: '=', // 第二分類 third: '=' // 第三分類 }, controller: function ($scope) { // 已經被選取的分類 $scope.selectedCategory = { first: 0, second: 0, third: 0 }; // 分類選項 $scope.categorySelection = {}; $scope.categorySelection.firsts = []; $scope.categorySelection.seconds = []; $scope.categorySelection.thirds = []; }, replace: true, template: _template, link: function (scope) { // 取第一類選項資料 refeshCategorySelection('first'); // 第一分類選項異動, 更新第二分類選項 scope.$watch("selectedCategory.first", function () { scope.first = parseInt(scope.selectedCategory.first, 10); if (scope.first !== 0) { refeshCategorySelection('second', scope.first); } else { scope.categorySelection.seconds = []; scope.categorySelection.thirds = []; } }); // 第二分類選項異動, 更新第三分類選項 scope.$watch("selectedCategory.second", function () { scope.second = parseInt(scope.selectedCategory.second, 10); if (scope.second !== 0) { refeshCategorySelection('third', scope.second); } else { scope.categorySelection.thirds = []; } }); // 第三分類選項異動 scope.$watch("selectedCategory.third", function () { scope.third = parseInt(scope.selectedCategory.third, 10); }); // 更新選單 function refeshCategorySelection(type, id) { $http.get('/Home/GetData?id=' + id).success(function (data) { switch (type) { case 'first': scope.categorySelection.firsts = data; scope.categorySelection.seconds = []; // 清空第二分類選單 (template上剩下預設的"--第二分類--"選項) scope.categorySelection.thirds = []; scope.selectedCategory.first = 0; // 設定館分類被選取值 (讓被選取值回到"--第一分類--"選項上) scope.selectedCategory.second = 0; scope.selectedCategory.third = 0; break; case 'second': scope.categorySelection.seconds = data; scope.categorySelection.thirds = []; scope.selectedCategory.second = 0; scope.selectedCategory.third = 0; break; case 'third': scope.categorySelection.thirds = data; scope.selectedCategory.third = 0; break; default: break; } }); } } } }); // controller app.controller('homeCtrl', function ($scope) { $scope.query = {}; $scope.query.first = 0; $scope.query.second = 0; $scope.query.third = 0; $scope.onSend = function () { console.log($scope.query); }; }); </script> </head> <body ng-app="myApp" ng-controller="homeCtrl"> <category-selection first="query.first" second="query.second" third="query.third"></category-selection><button ng-click="onSend()">Send</button> </body> </html>
2015年8月14日 星期五
angular directive 連動選單
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言