为什么推送对此cookie数组无效
Why does push not work on this cookie array?
这很好用:
$cookies.animals = []
$cookies.animals.push({cat: 'meow'})
console.log($cookies.animals) -> [Object]
但工厂功能中相同的代码不起作用:
addAnimal: function(id, name, price){
console.log($cookies.animals) //-> [object Object]
$cookies.animals.push({cat: 'meow'}) //-> TypeError: undefined is not a function
}
为什么我会收到TypeError
如果我做这个
addAnimal: function(id, name, price){
$cookies.animals = []
console.log($cookies.animals) //-> []
$cookies.animals.push({cat: 'meow'}) //-> works
}
它可以工作(当然它会重置数组),所以$cookies.animals
发生了一些奇怪的事情。
如果我们在工厂函数中查看我的console.log
:
我们得到这个:
[object Object]
大写O
的Object
是我的猫,但我认为那个奇怪的object
在做邪恶的事情。它是从哪里来的?
老实说,我真的不知道发生了什么。请帮忙。我所要做的就是附加到一个数组。。。
根据AngularJS$cookie文档:
只有一个简单的对象被公开,通过向该对象添加或从中删除属性,在当前$eval结束时创建/删除新的cookie对象的属性只能是字符串
您的初始代码之所以有效,是因为您可以在任何时候对任何对象设置任何类型的属性。Angular不保留非字符串值,因此在后一个使用上下文中不再设置animals
属性。在写入和读取(分别)时,您必须序列化和反序列化(可能通过JSON)。
所以你需要做这样的事情来初始化cookie:
var animals = [];
animals.push('Furry Cat');
$cookies.animals = JSON.stringify(animals);
稍后阅读时,您需要这样做:
var animal_cookie_value = $cookies.animals,
animals = animal_cookie_value ? JSON.parse(animal_cookie_value) : [];
至于你补充的备注:
大写
O
的Object
是我的猫,但我认为那个奇怪的物体在做邪恶的事情。它是从哪里来的?
当你看到
object Object
在JavaScript中,您可以看到JavaScript对象上默认toString()
方法的输出。换句话说,您在字符串的上下文中使用了一个对象,所以JS将其强制转换为字符串(这会导致您质疑的值)。
FWIW,我开发了一个JavaScript cookie库,它允许您传入任何数据,并为您处理序列化。它目前托管在谷歌代码上,但我正在努力将它转移到GitHub,并希望有一天能为它添加AngularJS模块。
- 创建一个 json cookie 数组
- 如何使用 json.stringify 在 cookie 中正确存储对象数组
- 将对象/数组存储在 jQuery Cookie 中
- 使用 cookie 记住数组中的所有值 - JavaScript
- 在 Jquery 中创建或更新 cookie 数组
- 如何创建一个 cookie 数组并反转它
- 如何使用 cookie 数组中的项目填充 KO 绑定列表
- 向数组 cookie 添加值
- 检查 cookie 值是否在数组中
- 用于存储单选按钮数组的Javascript cookie
- 将数组存储在jQuery cookie中
- 在数组位置获取并设置cookie值
- 为什么推送对此cookie数组无效
- php cookie值到javascript数组
- 如何将php数组存储在一个cookie中,然后通过javascript读取它
- 如何使用jQuery$.cokie()在cookie中存储对象数组
- 在JavaScript函数中用数组数据动态填充PHP cookie
- javascript中的Cookie数组
- 检查 cookie 数组元素是否存在
- 使用JS/JQuery创建永不过期的Cookie数组