2017-11-30 2 views
0

私は、検索ドキュメントフォームにページを戻し、私の 'documentSearch'メソッドを呼び出すディレクティブを作成しようとしています。ブラウザは、Webサービスが格納されて戻り、localStorageに保存されたparamsを使用してWebサービスを呼び出します。AngularJS

Uncaught TypeError: Cannot read property 'dsSvc' of undefined

APPCONFIG.dsSvc店舗情報を文句を言うように私は間違ってここに何が起こっているかわかりません。それは検索ページから絶対にうまく動作しますが、この指示文では作成しません。どんな考え?私は十分に長い間これに固執しています。私はそれが私がそれを行う方法(画面に戻って、Webサービスを呼び出す)を動作させるかどうか完全にはわかりません。

app.directive('previousPage', ['$window', function($window) { 
    return { 
     restrict: 'A', 
     link: function (scope, elem, attrs, $scope,GenericServiceSvc,APPCONFIG) { 
      elem.bind('click', function() { 
       $window.history.back(); 

       var paramsBack = JSON.parse(window.localStorage.getItem('srchParams')); 

       var svcData = { 
        invoke: 'documentSearch', 
        app: APPCONFIG.dsSvc, 
        params: paramsBack 
       }; 

       GenericServiceSvc.callService(svcData).then(

        function (response) { 
         if (response) { 
          console.log(response); 
         } else { 
          //no results 
         } 
        }, function() { 
         console.log(svcData.invoke + '- Fail'); 
        } 
       ); 

      }); 
     } 
    }; 
}]); 

答えて

1

リンク機能シグネチャは次のとおりです。

function link(scope, element, attrs, controller, transcludeFn) {...}

それはあなたがのAppConfigを注入しようとしているように見えるリンク機能に(?それはサービス/工場/定数です)、あなたが本当に求めていることは、AngularJSがtranscludeFn引数であると予想されるものからdsSvcを取得することです。

ディレクティブ関数にあなたの注射を移動

app.directive('previousPage', ['$window', 'GenericServiceSvc', 'APPCONFIG', function($window, GenericServiceSvc, APPCONFIG) { 
    return { 
     restrict: 'A', 
     link: function (scope, elem, attrs) { 
      elem.bind('click', function() { 
       $window.history.back(); 

       var paramsBack = JSON.parse(window.localStorage.getItem('srchParams')); 

       var svcData = { 
        invoke: 'documentSearch', 
        app: APPCONFIG.dsSvc, 
        params: paramsBack 
       }; 

       GenericServiceSvc.callService(svcData).then(

        function (response) { 
         if (response) { 
          console.log(response); 
         } else { 
          //no results 
         } 
        }, function() { 
         console.log(svcData.invoke + '- Fail'); 
        } 
       ); 

      }); 
     } 
    }; 
}]); 
+0

のAppConfigが実際に工場です。私はこれらの指令をどのように構築するかについてはあまり確信がありません。私はいくつかのドキュメンテーションを経るのに時間を費やしましたが、理解できる方法で説明されていませんでした。私はそれがあなたのバージョンとどのようになっているのかを知りましょう。ありがとう。 – hellomate

+0

それは働いていますが、その結果は期待に近いものです。私は今、 'console.log(respose);を使ってドキュメントを見ることができます。多くの変数がコントローラで定義されており、このディレクティブがapp.jsファイルに格納されているため、検索ページからは表示されません。ドキュメントの検索を担当するsearch()関数のほとんどをコピーしました。たとえば、$ scope.sortByを使用していても、ブラウザはこのエラーを表示します。 'TypeError:未定義の' sortBy 'プロパティを読み取ることができません。コントローラで定義したすべての機能をコピー&ペーストして、指示文が機能するようにしたくないのです... – hellomate

+0

ディレクティブコントローラを 'require 'することも、' scope'でアクセスすることもできます。あなたがあなたのすべての機能を動かす必要はありません。 – Phix

関連する問題