0

$rootScope 配列変数 (arrayX) を初期化し、同じコントローラー (controllerA) の $rootScope 関数で使用しようとしています。

この変数とこの関数に $scope の代わりに $rootScope を使用している理由は、後で別のコントローラーからそれらを呼び出すことを計画しているためです。

問題は、コントローラーの $rootScope 関数を呼び出すと、「Uncaught TypeError: data.push is not a function etc.」というメッセージが表示されることです。

$rootScope arrayX = [] 変数を宣言したとしても、関数を呼び出すと、この初期化は無視されるか、認識されないと思います。なぜこのエラーが発生したのか、$rootScope の概念について何が欠けているのか、誰か説明してもらえますか? ありがとう

コード

angular.module('myApp')
  .controller('mainCtrl', function ($scope, $rootScope, $uibModal) {

//does this count as a valid variable initialization? 
$rootScope.localCart = [];

$rootScope.pushToCart = function (obj) {

    $rootScope.localCart.push(obj); //TYPEERROR
    ....

$rootScope.pushToCart 関数で $rootScope.localCart を再宣言すれば問題ない

    $rootScope.pushToCart = function (obj) {
        $rootScope.localCart = [];
        $rootScope.localCart.push(obj); // OK!
        ...

私が行方不明の何かがあります。外部関数の初期化が無視されるのはなぜですか? 事前に $rootScope 変数を宣言するのは良い考えだと思いました (関数内宣言と他の $scope 変数との混乱を避けるため...)

編集:サービスの提案をありがとうございました。できるだけ早く試してみます (寝る必要があります!) それだけです... $rootScope 変数が初期化される理由を本当に理解したかったのです。関数から push メソッドを呼び出すと、失敗する/認識されません。

4

2 に答える 2

1

$rootScope を使用する場合は、配列の定義と関数宣言を run ブロックに入れ、コントローラーで使用することをお勧めします。したがって、関数を使用するときに、両方が宣言されていることを確認できます。

しかし、多くの人が指摘したように、サービスでこれを行う必要があります。

于 2015-11-24T23:08:43.543 に答える
1

2 つの異なる名前付き変数があり、1 つは localCart で、もう 1 つは localCartUser です。

最初のスニペットで localCart を宣言しますが、宣言されていない localCartUser 変数にプッシュしようとします。

サービスを使用する代わりに rootScope に再利用可能な機能を追加しないでください (私のコメントを参照してください)

于 2015-11-24T22:32:14.303 に答える