Web アプリケーションの AngularJS コードで非常に奇妙なエラーに遭遇しました。
データベースに新しいデータを挿入するためのフォームを持つアプリケーションがありますが、その前に一致を探します。
ここで、データベースに挿入するオブジェクトには一連のコレクションがあり、それが既に存在する場合、アプリケーションはコンテンツ全体を UI に表示し、ユーザーはコレクションに新しいアイテムを追加できます。
コレクションは、それぞれが独自のビューを持ち、navbar メニューからそれらに独立してアクセスできるエンティティで構成されているため、フォームで add new item メソッドを呼び出すと、実際には前のものからリサイクルされます。これが面白い部分です。
私はフォームでそれらのうちの 3 つを実行しましたが、それらはすべて正常に動作し、同じビューが表示され、同じ機能を備えていますが、4 つ目を試してみると、次のエラーが表示されます。
angular.js:13294 Error: [$injector:unpr] Unknown provider: pagingParamsProvider <- pagingParams <- TreatmentController2
http://errors.angularjs.org/1.5.2/$injector/unpr?p0=pagingParamsProvider%20%3C-%20pagingParams%20%3C-%20TreatmentController
さらに面白いことに、別のエンティティ ビュー アクセスで使用されるものと同じコードをコントローラーとビューに使用していますが、フォームから実行すると機能しません。
ページング パラメータ インジェクションを削除すると、ビューが読み込まれますが、もちろん、すべての機能が失われます。
コードは次のとおりです。
コントローラ:
(function() {
'use strict';
angular
.module('vivaxDataManagerApp')
.controller('TreatmentController', TreatmentController);
TreatmentController.$inject = ['$scope', '$state', 'Treatment', 'TreatmentSearch', 'ParseLinks', 'AlertService', 'pagingParams', 'paginationConstants'];
function TreatmentController ($scope, $state, Treatment, TreatmentSearch, ParseLinks, AlertService, pagingParams, paginationConstants) {
var vm = this;
vm.loadAll = loadAll;
vm.loadPage = loadPage;
vm.predicate = pagingParams.predicate;
vm.reverse = pagingParams.ascending;
vm.transition = transition;
vm.clear = clear;
vm.search = search;
vm.searchQuery = pagingParams.search;
vm.currentSearch = pagingParams.search;
vm.loadAll();
function loadAll () {
if (pagingParams.search) {
TreatmentSearch.query({
query: pagingParams.search,
page: pagingParams.page - 1,
size: paginationConstants.itemsPerPage,
sort: sort()
}, onSuccess, onError);
} else {
Treatment.query({
page: pagingParams.page - 1,
size: paginationConstants.itemsPerPage,
sort: sort()
}, onSuccess, onError);
}
function sort() {
var result = [vm.predicate + ',' + (vm.reverse ? 'asc' : 'desc')];
if (vm.predicate !== 'id') {
result.push('id');
}
return result;
}
function onSuccess(data, headers) {
vm.links = ParseLinks.parse(headers('link'));
vm.totalItems = headers('X-Total-Count');
vm.queryCount = vm.totalItems;
vm.treatments = data;
vm.page = pagingParams.page;
}
function onError(error) {
AlertService.error(error.data.message);
}
}
function loadPage (page) {
vm.page = page;
vm.transition();
}
function transition () {
$state.transitionTo($state.$current, {
page: vm.page,
sort: vm.predicate + ',' + (vm.reverse ? 'asc' : 'desc'),
search: vm.currentSearch
});
}
function search (searchQuery) {
if (!searchQuery){
return vm.clear();
}
vm.links = null;
vm.page = 1;
vm.predicate = '_score';
vm.reverse = false;
vm.currentSearch = searchQuery;
vm.transition();
}
function clear () {
vm.links = null;
vm.page = 1;
vm.predicate = 'id';
vm.reverse = true;
vm.currentSearch = null;
vm.transition();
}
}
})();
HTML コードからの呼び出し:
<div class="form-group-row">
<label class="col-md-2 form-control-label">Insert new Treatment:</label>
<div class="col-md-2">
<a class="btn btn-success" ng-click="newTreatment()">
<span class="glyphicon glyphicon-plus"/>
</a>
</div>
</div>
フォームコントローラーの関数:
$scope.newTreatment = function () {
$scope.myHidingValue=true;
$uibModal.open({
templateUrl: 'app/entities/treatment/treatment-dialog.html',
controller: 'TreatmentController',
size: 'lg',
controllerAs: 'vm',
backdrop: 'static',
resolve: {
entity: function () {
return {};
}
}
}).result.then(function (result) {
$scope.publi = result;
}, function () {
})
};
このプロジェクトには何千行もの行があるため、最も関連性の高いコードと思われるもののみを投稿していますが、必要に応じて、さらにコードを投稿してもかまいません
よろしくお願いします
スティーブン