我有一个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-INIT
我尝试使用<div ng-controller="SearchCtrl" ng-init="init(true)">
告诉控制器它是否从头部搜索表单运行,但似乎ng-init
在控制器之后执行,因此它无法访问传递的参数。
传递$元素
如果我将$element
注入控制器,我可以访问附加ng-controller
指令的DOM节点,但是对于带有路由的页面,angular会引发错误,因为没有$element
可供注射。
所以我要么需要某种方法将参数传递给控制器,或者某种方式来告诉控制器正在运行的上下文(内联ng-controller
与路由)。谢谢!
答案 0 :(得分:2)
我建议使用注入的$routeParams
service将案例区分到控制器的函数中。
答案 1 :(得分:1)
搜索的实际处理必须在服务层中完成。不在控制器中。 基本上将两个控制器合并为一个可能会导致一系列问题。
考虑拥有两个控制器。一个用于完整搜索,一个用于标题搜索。
这两个控制器都会注入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 () { ... }
};
});