/** * 级联 * * @Author: Shann * @LastEditors: Shann * @Date: 2021-08-04 09:48:49 * @LastEditTime: 2021-08-04 11:00:19 * @Copyright: Copyright 2021-2021, all rights reserved. Essa.cn */ angular.module("esNgAntd").directive("antdCascader", function () { return { controllerAs: "antdCascader", restrict: "E", transclude: true, replace: true, scope: { options: "=", }, controller: function ($scope, $element, $attrs) { this.getContext = function () { return $scope; }; $scope.state = { options: [], menus: [], }; $scope.flatten = function (array, level = 1) { let elements = []; array.forEach((element) => { element.level = level; elements.push(element); if ( typeof element.children !== "undefined" && element.children.length > 0 ) { elements = elements.concat( $scope.flatten(element.children, level + 1) ); } }); return elements; }; $scope.handleFocus = function () { $scope.state.menus.push($scope.options); }; $scope.handleBlur = function () { $scope.state.menus = []; }; $scope.handleExpand = function (value) { let current = $scope.state.options.filter( (item) => item.value === value )[0]; if ($scope.state.menus.length > current.level) { $scope.state.menus.splice(current.level); } if ( typeof current.children !== "undefined" && current.children.length > 0 ) { $scope.state.menus.push(current.children); } }; }, link: function ($scope, $element, $attrs, $controllers, $transclude) { $scope.state.options = $scope.flatten($scope.options); }, }; });