0

モジュールの 1 つで $rootScope 変数を設定しましたが、別のモジュールで同じ $rootScope 変数にアクセスしたいと考えています。これまでのところ、両方のモジュールで変数が適切に設定されていることがわかりますが、$rootScope で変数にアクセスしようとすると、未定義になるだけです。

ファクトリ/サービスの回避策を実行せずにこの変数にアクセスするにはどうすればよいですか? 変数は非常にシンプルで、必要なものには $rootScope で十分です。問題を説明するために、いくつかの一般的なサンプル コードを以下に示します。

file1.js

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

app.controller('Ctrl1', ['$scope', '$rootScope', function($scope, $rootScope) {
    $scope.myFunc = function() {
        $rootScope.test = 1;
    }
}

file2.js

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

app.controller('Ctrl2', ['$scope', '$rootScope', function($scope, $rootScope) {
    $scope.need_to_access_this = $rootScope.test; // undefined
    console.log($rootScope); // returns JS object w/ test property set to 1
}
4

2 に答える 2

1

$rootScope.testではCtrl1、値は $scope.myFunc 内に設定されます。

問題は、その関数を呼び出していないため、test$rootScope のプロパティが設定されないことです。

コントローラーで直接呼び出すか$scope.myFunc();Ctrl1設定する必要があります。$rootScope.test = 1;

app.controller('Ctrl1', ['$scope', '$rootScope', function($scope, $rootScope) {
    $scope.myFunc = function() {
        $rootScope.test = 1;
    };

    $scope.myFunc();
}

また

app.controller('Ctrl1', ['$scope', '$rootScope', function($scope, $rootScope) {
    $rootScope.test = 1;
}

編集:

上記の提案は引き続き有効であるため、myFunc() を呼び出す必要があります。

しかし、あなたのコードの問題は、それがにCtrl1属し、MyApp1Ctrl2属していることMyApp2です。

すべてのアプリケーションには単一のルート スコープがあります(ドキュメントはこちら) 。

Ctrl2次のコントローラーとして作成する必要がありますMyApp1

angular.module('MyApp1')
    .controller('Ctrl2', ['$scope', '$rootScope', function($scope, $rootScope) {
        $scope.need_to_access_this = $rootScope.test; // undefined
        console.log($rootScope); // returns JS object w/ test property set to 1
    }]);
于 2014-05-22T18:21:03.897 に答える