2014-03-28 3 views
1

이것은 후속 질문입니다. How to create this global constant to be shared among controllers in Angularjs?AngularJS에서 컨트롤러간에 공유 할 수있는 속성으로 객체를 만드는 방법은 무엇입니까?

답변을 통해 상수 $ webroot를 컨트롤러간에 공유 할 수 있습니다.

app = angular.module('myApp', []); 
app.constant('$webroot', 'localhost/webroot/app'); 

app.controller('myController', ['$scope', '$webroot', function($scope, $webroot) { 
    $scope.webroot = $webroot; 
}]); 

그러나 10 개의 상수가 있으면 문제가되는데 10 개의 상수를 모두 컨트롤러에 주입해야합니다. 이것은 컨트롤러 선언을 길고보기 흉하게 만듭니다. AngularJS에서 컨트롤러간에 공유 할 수있는 속성을 사용하여 객체를 만들려면 어떻게해야합니까? 이런 식으로 많은 상수 대신에 하나의 객체 만 주입하면됩니다. Angularjs에서이 작업을 수행 할 수 있습니까? 감사.

답변

5
var app = angular.module('app', []); 

app.constant('config', { 
    prop1: 'val1', 
    prop2: 'val2', 
    ... 
}); 

app.controller('Ctrl', ['config', function(config) { 
    console.log(config.prop1); 
    console.log(config.prop2); 
    ... 
}]); 
2

당신은 그 팩토리 사용할 수 있습니다

app = angular.module('myApp', []); 
app.factory('MyGlobals', function() { 
    return { 
    globalOne: 12345, 
    globalTwo: 'Hey there', 
    globalThree: {foo: 'bar'}, 
    globalFour: [1, 2, 3, 4], 
    isFoo: function() { 
     return (this.globalTwo == 'Foo' ? true : false); 
    } 
    } 
}); 

app.controller('myController', ['$scope', 'MyGlobals', function($scope, MyGlobals) { 
    $scope.globalOne = MyGlobals.globalOne 
    [...] 
    if (MyGlobals.isFoo()) { 
    // Be creative 
    } 
}]); 
2

은 여러 가지 방법으로 다른 컨트롤러간에 개체 또는 변수를 공유 할 수 있습니다 -

  1. 사용하여 공장

  2. 사용하여 서비스

  3. 브로드 캐스트 또는 귀하의 요구 사항은 단지 여러 컨트롤러간에 변수를 공유하는 경우

을 방출, 당신은 서비스를 사용하여이 작업을 수행 할 수 있습니다.

다음과 같이 서비스를 생성하십시오 - 여기서 name은 sharedService입니다. 당신은 자신의 서비스 이름을 사용할 수 있습니다. 그리고 'this'키워드를 사용하여 변수를 정의/선언하십시오 (원하는만큼).

var app = angular.module('app', []); 

    app.service('sharedService', function ($rootScope) { 
    this.globalvar1 = "my global variable1"; 
    this.globalvar2=""; 
    }); 

를 주입 컨트롤러에서 서비스를 누른 다음

app.controller('myController', ['$scope', 'sharedService', 
    function ($scope,sharedService) { 
    var myGlobalVariable=sharedService.globalvar1; 
    sharedService.globalvar1="my global variable value changed from controller"; 
    }]); 

당신은 모든 컨트롤러에 서비스 변수를 사용할 수 있습니다 아래와 같이 서비스 변수에 액세스하지만 당신은 컨트롤러

에서 서비스 이름을 주입해야
관련 문제