2017-11-30 1 views
0

페이지를 내 검색 문서 양식으로 되돌리고 'documentSearch'메서드를 호출하는 지시문을 만들려고합니다. 브라우저가 웹 서비스가 저장되는돌아가서 localStorage에 저장된 params를 사용하여 웹 서비스를 호출하십시오. AngularJS

Uncaught TypeError: Cannot read property 'dsSvc' of undefined

APPCONFIG.dsSvc 정보를 저장 불평으로 내가 잘못 여기에 무슨 일이 일어나고 있는지 모르겠어요. 그것은 검색 페이지에서 절대적으로 잘 작동하지만,이 지시문에서는 생성하지 않습니다. 왜 그런가? 나는 이것에 충분히 오래 머물러있다. 나는 그것이 (화면으로 돌아가서 웹 서비스를 호출하는) 내가하는 방식대로 작동하는지 확실하지 않다.

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 :'undefined '의'sortBy '속성을 읽을 수 없습니다. 컨트롤러에서 정의한 모든 기능을 복사하여 붙여 넣기를 원하지 않기 때문에 지시문이 작동 할 수 있습니다. – hellomate

+0

지시문 컨트롤러를'요구 '하거나'scope'를 통해 액세스 할 수 있습니다. 설명서를 닦으 라. 당신이 요구하는 것은 당신이 모든 기능을 움직일 필요가 없다. – Phix

관련 문제