AngularJS - $ rootScope变量初始化失败

时间:2015-11-24 22:21:32

标签: javascript angularjs angularjs-scope angularjs-controller angularjs-rootscope

我尝试初始化$ rootScope数组变量(arrayX)并在同一个控制器(controllerA)的$ rootScope函数中使用它。

我为此变量使用$ rootScope而不是$ scope的原因是我以后计划从另一个控制器调用它们。

问题在于,当我调用控制器的$ rootScope函数时,我得到一个未捕获的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方法时失败/无法识别。

2 个答案:

答案 0 :(得分:1)

您有两个不同的命名变量,一个是localCart,另一个是localCartUser。

在你的第一个片段中,你声明了localCart,但是你试图进入一个未声明的localCartUser变量。

不要在rootScope上添加可重用的功能而是使用服务(请参阅我的评论)

答案 1 :(得分:1)

如果你打算使用$ rootScope,我会建议在运行块中定义数组和函数声明,然后在控制器中使用它。因此,您可以确定在使用该函数时,都会声明它们。

但是,你应该在许多人指出的服务中这样做。