0

我有一个 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>

我如何从控制器内部判断它正在运行的上下文?

我尝试过的事情:

初始化

我试图<div ng-controller="SearchCtrl" ng-init="init(true)">告诉控制器它是否从标题搜索表单中运行,但它似乎ng-init是在控制器之后执行的,所以它无权访问传递的参数。

传递$元素

如果我注入$element到控制器,我可以访问该ng-controller指令附加到的 DOM 节点,但是在带有路由的页面的情况下,角度会引发错误,因为没有$element可用的注入。

所以我要么需要某种方式将参数传递给控制器​​,要么需要某种方式来判断控制器正在从哪个上下文运行(内联ng-controller与路由)。谢谢!

4

2 回答 2

2

我建议区分使用注入$routeParams 服务到控制器功能中的情况。

于 2013-06-27T07:20:04.450 回答
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 () { ... }
    };
});
于 2013-06-27T07:28:14.663 回答