AngularJS - $rootScope 变量初始化失败

AngularJS - $rootScope variable initialization fails

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

我对这个变量和这个函数使用 $rootScope 而不是 $scope 的原因是我打算稍后从另一个控制器调用它们。

问题是,当我调用控制器的 $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 变量混淆...)

编辑:感谢大家的 service 建议。我会尽快尝试(我需要睡觉!) 只是...我真的很想 了解 为什么 $rootScope 变量初始化。 fails/is 当我从函数调用 push 方法时无法识别。

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

在您的第一个代码段中,您声明了 localCart,但随后您尝试推入一个未声明的 localCartUser 变量。

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

如果你打算使用 $rootScope,我建议在 运行 块中定义数组和函数声明,然后在控制器中使用它。所以你可以确定,当你使用函数时,两者都被声明了。

但是,正如许多人指出的那样,您应该在服务中执行此操作。