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,我建议在 运行 块中定义数组和函数声明,然后在控制器中使用它。所以你可以确定,当你使用函数时,两者都被声明了。
但是,正如许多人指出的那样,您应该在服务中执行此操作。
我正在尝试初始化 $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,我建议在 运行 块中定义数组和函数声明,然后在控制器中使用它。所以你可以确定,当你使用函数时,两者都被声明了。
但是,正如许多人指出的那样,您应该在服务中执行此操作。