#angularjs
#angularjs
Вопрос:
Мне нужно добавить фильтр для обработки разбивки на страницы в существующем приложении,
В index.js у нас есть все
require('angular')
require('angular-ui-notification');
var myapp= angular.module('myapp', [
'ngRoute',
'ui.bootstrap',
'ngSanitize',
'ui.bootstrap'
]);
$http.get('configuration.json').then(function (response) {
var parameters = {};
parameters = response.data;
angular.element(document).ready(function() {
mainModule
.controller('SimpleCtrl', require('./controllers/Simple.js'))
.provider('runtimeConfig', require('./services/configuration.js'))
.config(function ($httpProvider) {
$httpProvider.defaults.headers.common["X-Requested-With"] = 'XMLHttpRequest';
})
.config(function(runtimeConfigProvider){
})
.config(function ($routeProvider) {
$routeProvider
.when('/', {
template: require('../views/myHome.html'),
controller: require('./controllers/myHome.js'),
accessPolicy: { authentication: false, role: "ALL"}
})
})
})
})
Для соответствующего myHome.html Мне нужно добавить разбивку на страницы, где у меня есть myHome.js файл ,
'use strict';
module.exports = function($scope, $filter, $log, $route, $rootScope, $location, uibModal, MyService) {
}
где я планирую использовать приведенный ниже код.
var app=angular.module('myApp', []);
function MyCtrl($scope) {
$scope.currentPage = 0;
$scope.pageSize = 10;
$scope.data = [];
$scope.numberOfPages=function(){
return Math.ceil($scope.data.length/$scope.pageSize);
}
for (var i=0; i<45; i ) {
$scope.data.push("Item " i);
}
}
//We already have a limitTo filter built-in to angular,
//let's make a startFrom filter
app.filter('startFrom', function() {
return function(input, start) {
start = start; //parse to int
return input.slice(start);
}
});
<link href="http://getbootstrap.com/2.3.2/bootstrap.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-controller="MyCtrl">
<ul>
<li ng-repeat="item in data | startFrom:currentPage*pageSize | limitTo:pageSize">
{{item}}
</li>
</ul>
<button ng-disabled="currentPage == 0" ng-click="currentPage=currentPage-1">
Previous
</button>
{{currentPage 1}}/{{numberOfPages()}}
<button ng-disabled="currentPage >= data.length/pageSize - 1" ng-click="currentPage=currentPage 1">
Next
</button>
</div>
Но я не знаю, как ввести конкретный код фильтра в myHome.js,
app.filter('startFrom', function() {
return function(input, start) {
start = start; //parse to int
return input.slice(start);
}
});
где у меня есть мое приложение в index.js и нужно сделать разбивку на страницы из myHome.js . Пожалуйста, предложите, как использовать код для myHome.js . Я получаю приведенное ниже исключение, если пытаюсь использовать startFrom,
bundle.annotated.js:29401 Error: [$injector:unpr] Unknown provider:
startFromFilterProvider <- startFromFilter
http://errors.angularjs.org/1.4.7/$injector/unpr?p0=startFromFilterProvider <-<div ng-view="" class="ng-scope">tartFromFilter
at http://localhost:9000/bundle.annotated.js:16992:12
at http://localhost:9000/bundle.annotated.js:21213:19
at Object.getService [as get] (http://localhost:9000/bundle.annotated.js:21361:39)
at http://localhost:9000/bundle.annotated.js:21218:45
at Object.getService [as get] (http://localhost:9000/bundle.annotated.js:21361:39)
at http://localhost:9000/bundle.annotated.js:35153:24
at new module.exports (http://localhost:9000/bundle.annotated.js:550:18)
at invoke (http://localhost:9000/bundle.annotated.js:21402:17)
at Object.instantiate (http://localhost:9000/bundle.annotated.js:21410:27)
at http://localhost:9000/bundle.annotated.js:26075:28
Ответ №1:
Синтаксис фильтров для добавления в качестве зависимости в контроллере таков,
filterName Filter
Eg: testFilter, reverseFilter, startFromFilter
Согласно нашему обсуждению в автономном режиме, ваш фильтр может перейти к,
mainModule
.filter('startFrom', function() {
return function(input, start) {
start = start; //parse to int
return input.slice(start);
}
})
var app=angular.module('myApp', []);
app.controller('MyCtrl', ['$scope', '$filter', function ($scope, $filter) {
$scope.currentPage = 0;
$scope.pageSize = 10;
$scope.data = [];
$scope.q = '';
$scope.getData = function () {
// needed for the pagination calc
// https://docs.angularjs.org/api/ng/filter/filter
return $filter('filter')($scope.data, $scope.q)
}
$scope.numberOfPages=function(){
return Math.ceil($scope.getData().length/$scope.pageSize);
}
for (var i=0; i<45; i ) {
$scope.data.push("Item " i);
}
}]);
//We already have a limitTo filter built-in to angular,
//let's make a startFrom filter
app.filter('startFrom', function() {
return function(input, start) {
start = start; //parse to int
return input.slice(start);
}
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.21/angular.min.js"></script>
<div ng-app="myApp" ng-controller="MyCtrl">
<input ng-model="q" id="search" class="form-control" placeholder="Filter text">
<select ng-model="pageSize" id="pageSize" class="form-control">
<option value="5">5</option>
<option value="10">10</option>
<option value="15">15</option>
<option value="20">20</option>
</select>
<ul>
<li ng-repeat="item in data | filter:q | startFrom:currentPage*pageSize | limitTo:pageSize">
{{item}}
</li>
</ul>
<button ng-disabled="currentPage == 0" ng-click="currentPage=currentPage-1">
Previous
</button>
{{currentPage 1}}/{{numberOfPages()}}
<button ng-disabled="currentPage >= getData().length/pageSize - 1" ng-click="currentPage=currentPage 1">
Next
</button>
</div>
Комментарии:
1. Да, я пробовал, но снова получаю то же исключение. Я скопировал функцию в myHome.js но возникает исключение. Ошибка: [$инжектор:unpr] Неизвестный провайдер: startFromFilterFilterProvider <- startFromFilterFilter
2. добавили ли вы файл, содержащий фильтр, в index.html файл
3. Я добавил вот так: ‘use strict’; module.exports = функция ($scope, $filter, $log, $route, $rootScope, $location, uibModal, MyService) { var startFrom = $filter(‘startFrom’); функция MyCtrl($scope,startFromFilter) { $scope.currentPage = 0; $scope.pageSize = 10; $scope.data = []; $scope .numberOfPages=функция(){ возвращает Math.ceil($scope.data.length/$scope.pageSize); } для (var i=0; i<45; i ) { $scope.data.push(«Item» i); } $scope.filtered = startFromFilter(данные); // вы можете использовать что-то вроде этого } }
4.
function($scope, $filter, $log, $route, $rootScope, $location, uibModal, MyService,startFromFilter)
5. Я получаю это исключение после добавления ошибки bundle.annotated.js: 29405: [$injector:unpr] Неизвестный поставщик: startFromFilterProvider <- startFromFilter <a rel="nofollow noreferrer noopener" href="https:///errors.angularjs.org/1.4.7/$injector/unpr?p0=startFromFilterProvider <-
errors.angularjs.org/1.4.7 /$injector/… ng-view=»» class=»ng-scope»>tartFromFilter