0

我試圖初始化一個$ rootScope數組變量(arrayX),並在同一個控制器(controllerA)的$ rootScope函數中使用它。

我使用$ rootScope而不是$ scope作爲這個變量的原因是這個函數是我打算稍後從另一個控制器調用它們。

問題是,當我調用控制器的$ rootScope函數時,我得到一個'Uncaught TypeError:data.push不是函數等。'

我相信,即使我聲明$ 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變量init。我從函數調用push方法時失敗/無法識別。

+0

$ rootScope應該放在幾乎所有情況下。你爲什麼需要這裏? – lux

+3

您應該將此邏輯添加到服務中,然後將服務注入到需要的其他控制器 – mindparse

+0

嘗試使用'$ scope'而不是'$ rootScope',那樣會更好(並且最終確實會創建一個服務) – floribon

回答

1

如果你要使用$ rootScope我會建議做數組的定義和函數聲明爲運行塊,然後在控制器中使用它。所以你可以確定當你使用這個函數時,兩者都被聲明。

但是,你應該在許多服務中這樣做。

1

您有兩個不同的命名變量,一個是localCart,另一個是localCartUser。

在您的第一個片段中,聲明瞭localCart,但是然後嘗試推入一個未聲明的localCartUser變量。

不要rootScope新增可重複利用的功能,而不是使用服務(見我的評論)

+0

對不起,我的錯。我嘗試總結代碼並對變量名稱造成混淆。最初我有2個陣列,但問題依然存在。請檢查我編輯的代碼。 –