Я изучаю угловой JS, пока работаю над проектом. У меня есть простое окно поиска, которое я использую в качестве общего компонента на всех своих страницах. Окно поиска имеет свой собственный контроллер и службу, которые выполняют ajax-вызовы на сервер, чтобы дать рекомендации по нажатию клавиш. Все работает отлично, если я запускаю searchBox.html. Однако, если я использую его в anonymousHomePage.html, используя ng-include. Кажется, он не работает, элемент управления даже не попадает в searchBoxController.js, и никаких предложений не появляется. Кроме того, я вижу следующую ошибку при загрузке anonymousHomePage.html.
Uncaught Error: Unknown provider: $compileProvider from ngAnimate
at <anonymous>:2765:19
at Object.getService [as get] (<anonymous>:2891:39)
at <anonymous>:2843:45
at Array.forEach (<anonymous>)
at forEach (<anonymous>:148:11)
at loadModules (<anonymous>:2833:5)
at <anonymous>:2838:38
at Array.forEach (<anonymous>)
at forEach (<anonymous>:148:11)
at loadModules (<anonymous>:2833:5)
Пожалуйста, помогите, потому что я действительно застрял. Очень жаль за длинный вопрос, но я не знаю, как еще это задать. Содержание моих файлов ниже:
anonymousHomePage.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
<link rel = "stylesheet"
href = "https://ajax.googleapis.com/ajax/libs/angular_material/1.0.0/angular-material.css">
<script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.js"></script>
<script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-animate.js"></script>
<script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-aria.js"></script>
<script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-messages.js"></script>
<script src = "https://ajax.googleapis.com/ajax/libs/angular_material/1.0.0/angular-material.js"></script>
<script src="/BookBox/components/anonymousHomePage/anonymousHomePageService.js"></script>
<script src="/BookBox/components/anonymousHomePage/anonymousHomePageController.js"></script>
<script src="/BookBox/shared/searchBox/searchBoxService.js"></script>
<script src="/BookBox/shared/searchBox/searchBoxController.js"></script>
<style>
</style>
</head>
<body ng-app="anonymousHomePageCtrl" ng-controller="anonymousHomeCtrl">
<ng-include src="'/BookBox/shared/anonymousToolbar/anonymousToolbar.html'"></ng-include>
<ng-include src="'/BookBox/shared/searchBox/searchBox.html'"></ng-include>
</body>
</html>
anonymousHomePageController.js:
var anonymousHomePageController=angular.module("anonymousHomePageCtrl",
["ngAnimate","anonymousHomePageService","searchBoxCtrlModule","searchBoxServiceModule"])
.controller("anonymousHomeCtrl", function($scope,anonymousService){
$scope.userInfo;
$scope.getUserInfo=function(){debugger;
anonymousService.getAnonymousUserInfo().
success(function (users) {debugger
$scope.userInfo = users;
})
.error(function (error) {
alert(error);
});
}
//$scope.getUserInfo();
});
searchBox.html:
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
<link rel = "stylesheet"
href = "https://ajax.googleapis.com/ajax/libs/angular_material/1.0.0/angular-material.css">
<script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.js"></script>
<script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-animate.js"></script>
<script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-aria.js"></script>
<script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-messages.js"></script>
<script src = "https://ajax.googleapis.com/ajax/libs/angular_material/1.0.0/angular-material.js"></script>
<script src="/BookBox/shared/searchBox/searchBoxService.js"></script>
<script src="/BookBox/shared/searchBox/searchBoxController.js"></script>
<style>
</style>
</head>
<body ng-app="searchBoxCtrlModule" ng-controller="searchBoxCtrl">
<div class='d-flex justify-content-center'>
<div class="row" >
<md-select ng-style="{'height':'42px','border':'1px solid #CCCCCC','background':'#f2f2f2'}" ng-model="selectedType" placeholder="Type" required md-no-asterisk="false"
md-on-close="setSelectedType(selectedType)">
<md-option value="Title">Title</md-option>
<md-option value="Author">Author</md-option>
<md-option value="Publisher">Publisher</md-option>
</md-select>
<div ng-style="{'width':'600px','margin-top':'20px'}">
<!-- <form name="autocompleteForm"> -->
<md-autocomplete
md-menu-class="decreaseWidth"
ng-disabled = "false"
md-no-cache = "true"
md-selected-item = "selectedItem"
md-search-text = "searchText"
md-items = "item in getSearchResults(searchText)"
md-item-text = "item.title"
md-min-length = "4"
placeholder = "Type to search">
<md-item-template>
<span md-highlight-text = "searchText"
md-highlight-flags = "^i">{{item.title}}</span>
</md-item-template>
<md-not-found>
No Books matching "{{searchText}}" were found.
</md-not-found>
</md-autocomplete>
<!--</form> -->
</div>
<a class="btn btn-success" ng-style={'margin-top':'20px','height':'42px'} href="#" role="button"><img src="/BookBox/assets/img/open-iconic/svg/magnifying-glass.svg" height="15"></a>
</div>
</div>
</body>
</html>
searchBoxController.js:
var searchBoxCtrlModule=angular.module("searchBoxCtrlModule",['ngMaterial','searchBoxServiceModule'])
.controller("searchBoxCtrl", function($scope,$timeout,$q,searchBoxService){
$scope.searchText;
$scope.searchResult=[];
$scope.selectedItem;
$scope.selectedType='None';
$scope.getSearchResults=function(searchText){debugger;
if(searchText.length >= 4){
$scope.searchResult.length=0;
searchBoxService.getSearchSuggestions(searchText,$scope.selectedType).
success(function (books) {debugger
$scope.searchResult = books;
})
.error(function (error) {
alert(error);
});
var deferred = $q.defer();
$timeout(function () { deferred.resolve( $scope.searchResult ); }, Math.random() * 1000, false);
return deferred.promise;
}
}
})
searchBoxService.js:
var searchBoxServiceModule=angular.module("searchBoxServiceModule",[])
.service("searchBoxService", function($http){
var searchBoxService={};
searchBoxService.getSearchSuggestions=function(key, searchType){
return $http.get("http://localhost:8081/BookBoxAPI/actions/search/"+key+"/"+searchType);
}
return searchBoxService;
})