1

Angularjs の $rootScope の設定に問題があります。

以下は私の機能です

App.controller('Controller',
function (UtilityService, $rootScope) {

var setSession = function () {

  $rootScope.test = "yes"; // <-- I get this

  UtilityService.getSession().success(
  function () {       
    $rootScope.test = "No"; // <-- I don't get this How do I get/set this value?       
  });      
};

setSession();   

});

追加情報:

機能する可能性のある方法の 1 つは、複数のコントローラー間で対話するサービスをセットアップすることです。http.get json オブジェクトを返すサービスでこれを行う方法を知っている人はいますか。

サービス内でインスタンス化されたコントローラーで動的スコープを取得できません。

4

2 に答える 2

2

私の問題に対処するために、私はしなければなりませんでした

1) $rootScope を 2 番目のコントローラーに渡す

App.controller($rootScope) {

2) 2 番目のコントローラーの関数を $rootScope に設定します

$rootScope.functionCall = 関数 () {};

3) 渡された値を $rootScope ($rootScope.orderId) に設定します

$rootScope.functionCall = function () {
 Service.getItems($rootScope.orderId).success(
    function(results) {
      $scope.items = results;
    });
};

4) ユーティリティ コントローラー内で、結果をループして解析し、#3 でわかるように $rootScope に設定します。「$rootScope.orderId」を初期化しています。

angular.forEach(results, function (value, key) {
      if (key != null) {
        $parse(key).assign($rootScope, value);
      }
    });   

5) サービスコール内からコントローラーの関数を再呼び出ししています! これは、私の変数を「スコープ内」に置く魔法をしたものです

$rootScope.functionCall();

6)機能が存在するかどうかをテストして、さまざまなページがユーティリティコードを利用するが、実行する機能がない可能性があるかどうかを確認しています

if (typeof $rootScope.functionCall == '関数')

var setSession = function () {

  UtilityService.getSession().success(
  function (results) {             

    // Place the rootscope sessions in scope
    angular.forEach(results, function (value, key) {
      if (key != null) {
        $parse(key).assign($rootScope, value);
      }
    });                

    // Have to bypass "scope" issues and thus have to execute these fns()
    if (typeof $rootScope.functionCall == 'function') {
      $rootScope.functionCall();
    }

});

};
setSession();
于 2015-02-12T17:18:50.210 に答える
0

前に書いたように、可能であれば $scope を使用し、複数のコントローラー間でデータを共有する必要がある場合は、サービスを使用できます。コードは次のようになります。

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

app.factory('$http', 'myService', function ($http, myService) {
    var customers = {};
    $http.get("http://www.w3schools.com/website/Customers_JSON.php")
        .success(function (response) {
            customers = response;
        });

    return {
        customers: customers
    };
});

app.controller('controller_one', function($scope, myService) {
  $scope.serv = myService.customers;
});

app.controller('controller_two', function($scope, myService) {
  $scope.serv = myService.customers;
});
于 2015-02-11T22:23:18.963 に答える