[英]How can I access the another ng-controller ng-model from another 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.