2013-06-29 11 views
0

저는 standart JS 응용 프로그램을 ng 파일로 변환하여 angularJS를 배우고 며칠 후입니다. 이 간단한 시나리오에 대해 궁금합니다.fb_connect()라는 글로벌 기능이있어 페이스 북 기반 로그인을 만들기 위해 모든 페이지 (또는 원하는 경우 컨트롤러)에서 사용할 수 있습니다. 이 함수는 간단한 http 호출을 만들고 JSON 객체를 수신하여 이동할 데이터를 포함합니다 (팝업, 로그인 등 표시)Angular - "public"function (newbie)

나는 내 응용 프로그램에 대한 공장 또는 서비스를 정의 할 수 있으며 어떤 컨트롤러에서도 사용할 수 있습니다. 그래서 fb_connect 팩토리 함수를 만들었습니다. 문제는 이제 모든 페이지 (모든 컨트롤러)에서, 내가 정의 할 필요가 있다는 것입니다 그 모든 컨트롤러의 생성자에서 fb_connect - 예 :

function welcome($scope,fb_connect){}); 

이런 종류의 작업을 수행하는 적절한 방법은 무엇입니까 각 컨트롤러에서 매번 이러한 기능을 정의하지 않고도 Angular를 사용하여 작업 할 수 있습니까?

감사

+0

누구나 질문에 답변 한 경우 대답으로 받아 들여야합니다. – John

답변

0

당신의 두 가지 옵션에 넣을 수는 다음과 같습니다

  • 가 서비스
로 주입 $rootScope
  • 에 함수를 선언

    제 조언은 서비스로 만드는 것입니다. 서비스의 전체 목적은 바로이 인용처럼 Angular.js 문서에 설명되어 있습니다 :

    각도 서비스가 웹 응용 프로그램에 공통적으로 특정 작업을 수행 ... 각도 서비스를 사용하려면 싱글은, 당신은 그것을 확인 서비스에 종속 된 종속 (컨트롤러 또는 다른 서비스)에 대한 종속성으로 간주합니다.

    당신이 당신의 질문에서 언급 한 바와 같이, 당신이 그것을 사용하는 당신이 원하는 모든 컨트롤러에 서비스를 정의하지 선호하는 것입니다. $rootScope 사용하면 모든 컨트롤러 또한 주입됩니다. 질문에 답하기 위해서 공장이나 서비스를 사용하는 올바른 방법은 그것을 사용하고자하는 컨트롤러에 주입하는 것입니다.

  • 1

    공장 및 서비스 설정은 각도의 의존성 주입 시스템의 모든 부분입니다. 이 시스템을 사용하면 다른 주입 된 사물에 의존하는 것을 만들어야 할 때 유용합니다. 의존성의 큰 나무입니다. 싱글 톤을 만들기에 좋습니다. 코드의 모든 부분이 일부 객체의 동일한 인스턴스를 사용하게됩니다.

    귀하의 경우 이러한 혜택이 적용되지 않는 것 같아서 들립니다. Angular의 DI를 사용하지 않는 것이 좋습니다. 전역 적으로 정의 된 함수가 있습니다. 직접 호출하고 DI를 건너 뜁니다. 거기에 아무 문제가 없습니다.

    물론 Ajax 호출을한다고해서 Angular $ http 서비스에 의존하지 않습니까?

    +0

    그것은 Ajax 호출이었고, $ 리소스 메소드로 전송하기로 결정했습니다 ... –

    0

    당신은 항상 $ rootScope

    myApp.run(function($rootScope, fb_connect){ 
        $rootScope.welcome = function(){ 
    
        }; 
    });