рдПрдВрдЧреБрд▓рд░рдЬреЗрдПрд╕ рдЗрдирдкреБрдЯ рдереНрд░реЙрдЯрд▓рд┐рдВрдЧ рд╡рд┐рде рдбреЗрдмреНрдпреВ

рдЗрдирдкреБрдЯ рдХреЗ рдереНрд░реЙрдЯрд▓рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рджреГрд╢реНрдп рд╣реИрдВ рддрд╛рдХрд┐ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рд╣рд░ рдмрд╛рд░ рдореВрд▓реНрдп рдХреЗ рдмрджрд▓реЗ рдЬрд╛рдиреЗ рдкрд░ рдкреБрдирд░реНрдЧрдгрдирд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдХрдо рдмрд╛рд░ред рдПрдХ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╢рдмреНрдж "рдкрд░рд╛рдЬрдп" рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рд╛рд░ рдореЗрдВ рдЖрдк рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреБрдЫ рд╕реНрдерд┐рд░ рд╕реНрддрд░ рдкрд░ рдореВрд▓реНрдп рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдирд┐рд░рдВрддрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ "рдЙрдЫрд╛рд▓" рдХрд╛ рдХрд╛рд░рдг рди рд╣реЛред рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдХ рд╡рд┐рд╣рд┐рдд рдорд╛рдорд▓рд╛ рддрддреНрд╡реЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдкрд╛рда рджрд░реНрдЬ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рддрд░реНрдХ рдореЗрдВ рдХреБрдЫ рдУрд╡рд░рд╣реЗрдб рд╢рд╛рдорд┐рд▓ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдлрд╝рд┐рд▓реНрдЯрд░ рдПрдХ REST рд╕рдВрд╕рд╛рдзрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдмреИрдХрдПрдВрдб рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд░ рдПрдХ рдХреНрд╡реЗрд░реА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ), рддреЛ рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдкрд╛рда рд▓рд┐рдЦрддреЗ рд╕рдордп рд╕рднреА рдмрд╛рд░ рдХреНрд╡реЗрд░реА рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдФрд░ рдкреБрдирдГ рд▓реЛрдб рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╣ рдЦрддреНрдо рд╣реЛрдиреЗ рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЕрдзрд┐рдХ рд╕рд╣реА рд╣реЛрдЧрд╛, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдЕрдиреБрд░реЛрдз рдХреЛ рдПрдХ рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВред

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рдпрд╣рд╛рдБ рд╣реИ: jsfiddle.net/nZdgm

рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╕реВрдЪреА ($ рдЧреБрдВрдЬрд╛рдЗрд╢.рд▓рд┐рд╕реНрдЯ) рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдПрдХ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреА рдЧрдИ рд╕реВрдЪреА ($ рдЧреБрдВрдЬрд╛рдЗрд╢.filteredList) рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ $ рдЧреБрдВрдЬрд╛рдЗрд╢.searchText рдлрд╝реАрд▓реНрдб рдХреЗ рдкрд╛рда рд╡рд╛рд▓реЗ рдХреБрдЫ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдЖрдкрдХрд╛ рдлрд╝реЙрд░реНрдо рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ (рдЕрднреА рдХреЗ рд▓рд┐рдП рдереНрд░реЙрдЯрд▓ рдЪреЗрдХрдмреЙрдХреНрд╕ рдкрд░ рдзреНрдпрд╛рди рди рджреЗрдВ):

<div data-ng-app='App'> <div data-ng-controller="MyCtrl"> <form> <label for="searchText">Search Text:</label> <input data-ng-model="searchText" name="searchText" /> <input type="checkbox" data-ng-model="throttle"> Throttle <label>You typed:</label> <span>{{searchText}}</span> </form> <ul><li data-ng-repeat="item in filteredList">{{item}}</li></ul> </div> </div> 


рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рджреГрд╢реНрдп рдЦреЛрдЬ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдФрд░ рддреБрд░рдВрдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рдирд╛ рд╣реИред рдирд┐рд╕реНрдкрдВрджрди рд╡рд┐рдзрд┐:

 var filterAction = function($scope) { if (_.isEmpty($scope.searchText)) { $scope.filteredList = $scope.list; return; } var searchText = $scope.searchText.toLowerCase(); $scope.filteredList = _.filter($scope.list, function(item) { return item.indexOf(searchText) !== -1; }); }; 


рдирд┐рдпрдВрддреНрд░рдХ $ рдШрдбрд╝реА рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ:

 $scope.$watch('searchText', function(){filterAction($scope);}); 


рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдХрд┐рд╕реА рдлрд╝реАрд▓реНрдб рдореЗрдВ рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░реЗрдЧрд╛ред рд╕реНрдерд┐рддрд┐ рдХреЛ рдорд╛рдкрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ .js рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдлрд╝рдВрдХреНрд╢рди рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ: рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдореЗрдВ рд╕рдордп рджреЗрдВред рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рд╡рд┐рд▓рдВрдмрд┐рдд рдХрд░реЗрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдордп рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдЕрдВрддрд┐рдо рдкреНрд░рдпрд╛рд╕ рдХреЗ рдмрд╛рдж рд╕реЗ рди рд╣реЛред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, 1 рд╕реЗрдХрдВрдб рдХреА рджреЗрд░реА рдХреЗ рд╕рд╛рде (рдЬреЛ рдореИрдВ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдкреНрд░рднрд╛рд╡ рдХреЛ рдЕрддрд┐рд░рдВрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП) рдФрд░ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рддреНрд╡рд░рд┐рдд рдкрд╛рда рдЗрдирдкреБрдЯ рдХреЗ рджреМрд░рд╛рди рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреА рдПрдХ рд╕рддрдд рд╕реНрдЯреНрд░реАрдо, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рддрдм рддрдХ рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдореИрдВ рдЕрднреА рд╕реЗ рд▓рд┐рдЦрдирд╛ рдмрдВрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ 1 рд╕реЗрдХреЗрдВрдб рдкрд╛рд╕ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдЖрдк рдЗрд╕ рддрд░рд╣ рдПрдХ рд╕рд░рд▓ рдмрд╣рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ:

 var filterThrottled = _.debounce(filterAction, 1000); $scope.$watch('searchText', function(){filterThrottled($scope);}); 


рд╣рд╛рд▓рд╛рдБрдХрд┐, рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдПрдХ рдЯрд╛рдЗрдорд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ $ рдкрдЪрд╛рдиреЗ рдХреЗ рдЪрдХреНрд░ рдХреЗ рдмрд╛рд╣рд░ рдЖрдЧ рд▓рдЧрд╛рддрд╛ рд╣реИ , рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЕрдВрддрддрдГ UI рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдгреАрдп рдХреЛ рд╣реБрдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдкрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЖрдкрдХреЛ рдХреЙрд▓ рдХреЛ $ рд▓рд╛рдЧреВ рдореЗрдВ рд▓рдкреЗрдЯрдирд╛ рдЪрд╛рд╣рд┐рдП:

 var filterDelayed = function($scope) { $scope.$apply(function(){filterAction($scope);}); }; 


рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдк рдЗрдирдкреБрдЯ рдмрдВрдж рд╣реЛрддреЗ рд╣реА $ рдШрдбрд╝реА рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 var filterThrottled = _.debounce(filterDelayed, 1000); $scope.$watch('searchText', function(){filterThrottled($scope);}); 


рдмреЗрд╢рдХ, рдпрд╣рд╛рдВ рдПрдХ рдкреВрд░реНрдг рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдереНрд░реЙрдЯрд▓рд┐рдВрдЧ рд╢рд╛рдорд┐рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рддрд╛рдХрд┐ рдЖрдк "рддрддреНрдХрд╛рд▓" рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдФрд░ рдЖрд╕реНрдердЧрд┐рдд рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рджреЗрдЦ рд╕рдХреЗрдВред рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдлрд┐рдбреЗрд▓ рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: jsfiddle.net/nZdgm

Source: https://habr.com/ru/post/In210344/


All Articles