我有一个AngularJS控制器,它在路由中定义的特定页面上使用:
when("/search/:term", {controller:'SearchCtrl', templateUrl:'/static/templates/supersearch/list.html'});
并且还附加到标题中的一个元素,该元素在所有页面上都使用:
<div ng-controller="SearchCtrl">
<form class="navbar-form pull-left super-search">
...
</form>
<div>
我如何从控制器中判断它在哪个上下文中运行?
我尝试过的东西:
ng初始化
我尝试使用<div ng-controller="SearchCtrl" ng-init="init(true)">
来告诉控制器它是否从标头搜索表单运行,但似乎ng-init
是在控制器之后执行的,因此它无法访问传递的参数。
通过$元素
如果我将$element
注入到控制器,我就能够访问ng-controller
指令所附加的DOM节点,但是在具有路由的页面的情况下,angular会引发错误,因为没有$element
可供注入。
因此,我需要某种方式将参数传递给控制器,或者某种方式来判断控制器是从哪个上下文运行的(内联ng-controller
与路由)。谢谢
我建议区分将$routeParams
服务注入控制器功能的情况。
搜索的实际处理必须在服务层中完成。不在控制器中。此外,将两个控制器基本上合并为一个控制器可能会导致一系列问题。
考虑使用两个控制器。一个用于完整搜索,一个用于标题搜索。这两个控制器都注入了Search
服务,该服务将处理搜索。
app.controller('HeaderSeachController', function (Search) {
Search.headerSearch();
});
app.controller('SeachController', function (Search) {
Search.search();
});
app.service('Search', function () {
return {
headerSearch: function () { ... },
search: function () { ... },
_sharedLogic: function () { ... }
};
});