我正在使用Elasticsearch和AngularJS构建一个小型搜索应用程序(仍在学习如何使用它们)。我知道这可能不是最佳实践,但对于所有AngularJS代码,尝试将所有js代码保存在1个文件中。
我想使用AngularJS UI Bootstrap Typeahead来实现自动完成功能,但是对于如何为应用程序设置2个控制器或者如果我能以某种方式在我当前的控制器中包含Typeahead有点困惑? 以下是我的一些代码:
var searchApp = angular.module('searchApp', ['elasticsearch', 'ngSanitize', 'ui.bootstrap']);
searchApp.controller('SearchResultsList', ['$scope', 'searchService', 'filterService', '$sce', function($scope, searchService, filterService, $sce) {
我已将ui bootstrap作为应用程序的依赖项,但由于我已将SearchResultsList作为我的控制器,因此不确定如何将TypeaheadCtrl包含在其中......
答案 0 :(得分:1)
是的,您可以在AngularJS中拥有尽可能多的控制器。但是,您需要小心(例如,在控制器之间传递变量,$scope.$parent
,如果适用)
同样,如果你正在使用预先输入(或者来自Angular UI-Bootstrap的任何指令,例如tabset
),你需要注意创建的子范围和原始范围是Angular-UI-Bootstrap 。始终使用某个保持对象声明scope
变量,这样就不会在指令的原始范围中覆盖它们($scope.data
存储您的数据而不是将其存储在$scope
中)
对于包含typeahead,这是一个简单的指令,当您将其作为模块中的依赖项包含在内时,您已经包含了它的功能。只需阅读文档并遵循它: