[angularjs] 변수를 저장하기 위해 Angular에서 $ rootScope를 어떻게 사용합니까?

$rootScope나중에 다른 컨트롤러에서 액세스하려는 컨트롤러에 변수를 저장 하는 데 어떻게 사용 합니까? 예를 들면 다음과 같습니다.

angular.module('myApp').controller('myCtrl', function($scope) {
  var a = //something in the scope
  //put it in the root scope
});

angular.module('myApp').controller('myCtrl2', function($scope) {
  var b = //get var a from root scope somehow
  //use var b
});

어떻게해야합니까?



답변

루트 범위에서 설정된 변수는 프로토 타입 상속을 통해 컨트롤러 범위에서 사용할 수 있습니다.

다음은 @Nitish 데모의 수정 버전으로 관계를 좀 더 명확하게 보여줍니다.
http://jsfiddle.net/TmPk5/6/

rootScope의 변수는 모듈이 초기화 될 때 설정되며, 상속 된 각 범위는 독립적으로 설정할 수있는 고유 한 복사본을 가져옵니다 ( change함수). 또한 rootScope의 값도 업데이트 할 수 있습니다 (의 changeRs기능 myCtrl2)

angular.module('myApp', [])
.run(function($rootScope) {
    $rootScope.test = new Date();
})
.controller('myCtrl', function($scope, $rootScope) {
  $scope.change = function() {
        $scope.test = new Date();
    };

    $scope.getOrig = function() {
        return $rootScope.test;
    };
})
.controller('myCtrl2', function($scope, $rootScope) {
    $scope.change = function() {
        $scope.test = new Date();
    };

    $scope.changeRs = function() {
        $rootScope.test = new Date();
    };

    $scope.getOrig = function() {
        return $rootScope.test;
    };
});


답변

컨트롤러 간 데이터 공유는 팩토리 / 서비스가 매우 유용합니다. 요컨대, 그것은 이런 식으로 작동합니다.

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

app.factory('items', function() {
    var items = [];
    var itemsService = {};

    itemsService.add = function(item) {
        items.push(item);
    };
    itemsService.list = function() {
        return items;
    };

    return itemsService;
});

function Ctrl1($scope,items) {
    $scope.list = items.list;
}

function Ctrl2($scope, items) {
    $scope.add = items.add;
}

이 바이올린에서 실제 예제를 볼 수 있습니다 : http://jsfiddle.net/mbielski/m8saa/


답변

angular.module('myApp').controller('myCtrl', function($scope, $rootScope) {
   var a = //something in the scope
   //put it in the root scope
    $rootScope.test = "TEST";
 });

angular.module('myApp').controller('myCtrl2', function($scope, $rootScope) {
   var b = //get var a from root scope somehow
   //use var b

   $scope.value = $rootScope.test;
   alert($scope.value);

 //    var b = $rootScope.test;
 //  alert(b);
 });

데모


답변

이 작업을 수행 할 이유가 없습니다. $ scope.value = $ rootScope.test;

$ scope는 이미 $ rootScope의 프로토 타입 상속입니다.

이 예를 참조하십시오

var app = angular.module('app',[]).run(function($rootScope){
$rootScope.userName = "Rezaul Hasan";
});

이제 앱 태그의 어느 위치에서나이 범위 변수를 바인딩 할 수 있습니다.


답변

먼저 $ rootScope에 값을 다음과 같이 저장하십시오.

.run(function($rootScope){
$rootScope.myData = {name : "nikhil"}
})

.controller('myCtrl', function($scope) {
var a ="Nikhilesh";
$scope.myData.name = a;
});

.controller('myCtrl2', function($scope) {
var b = $scope.myData.name;
)}

$ rootScope는 모든 $ scope의 부모이며 각 $ scope는 $ scope 자체를 사용하여 액세스 할 수있는 $ rootScope 데이터의 복사본을받습니다.


답변

“다른 컨트롤러에서 액세스”인 경우 각도 상수를 사용할 수 있습니다. 이점은 다음과 같습니다. 응용 프로그램 전체에서 액세스하려는 일부 전역 설정 또는 기타 항목을 추가 할 수 있습니다.

app.constant(‘appGlobals’, {
    defaultTemplatePath: '/assets/html/template/',
    appName: 'My Awesome App'
});

그런 다음 다음과 같이 액세스하십시오.

app.controller(‘SomeController’, [‘appGlobals’, function SomeController(config) {
    console.log(appGlobals);
    console.log(‘default path’, appGlobals.defaultTemplatePath);
}]);

(테스트하지 않았다)

자세한 정보 : http://ilikekillnerds.com/2014/11/constants-values-global-variables-in-angularjs-the-right-way/


답변

http://astutejs.blogspot.in/2015/07/angularjs-what-is-rootscope.html

 app.controller('AppCtrl2', function ($scope, $rootScope) {
     $scope.msg = 'SCOPE';
     $rootScope.name = 'ROOT SCOPE';
 });