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>

コントローラー内から、どのコンテキストで実行されているかをどのように確認できますか?

私が試したこと:

ng-init

<div ng-controller="SearchCtrl" ng-init="init(true)">ヘッダー検索フォームから実行されているかどうかをコントローラーに伝えるために使用しようとしましたがng-init、コントローラーの後に実行されるようで、渡されたパラメーターにアクセスできません。

$要素を渡す

コントローラーに注入$elementすると、ディレクティブがアタッチされている DOM ノードにアクセスできますng-controllerが、ルートのあるページの場合、Angular でエラーが発生します。これは$element、注入できるものがないためです。

そのため、パラメーターをコントローラーに渡す方法、またはコントローラーが実行されているコンテキスト (インラインng-controllerとルート) を伝える方法が必要です。ありがとう!

4

2 に答える 2

1

検索の実際の処理は、サービス層で行う必要があります。コントローラーにはありません。また、基本的に 2 つのコントローラーを 1 つにマージすると、さまざまな問題が発生する可能性があります。

コントローラーを 2 つ用意することを検討してください。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 () { ... }
    };
});
于 2013-06-27T07:28:14.663 に答える