在控制器内部,我如何判断它是从ng控制器还是从路由运行的



我有一个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 () { ... }
    };
});

最新更新