簡體   English   中英

我怎么知道在控制器內部,是否已經從ng-controller或路由運行

[英]How can I tell, inside a controller, if it has been run from ng-controller or a route

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

如果我將$element注入控制器,則可以訪問ng-controller指令附加到的DOM節點,但是在帶有路由的頁面的情況下angular會引發錯誤,因為沒有$element可用於注入。

所以我要么需要某種方法來將參數傳遞給控制器​​,要么需要某種方法來告訴控制器正在從哪個上下文運行(內聯ng-controller與route)。 謝謝!

我建議使用注入到控制器功能中的$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 () { ... }
    };
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM