好的,我完全被这个目瞪口呆。 (我可能会忽略一些显而易见的东西但是......)
我连续2次调用console.log。他们之间没有别的东西
console.log($state);
console.log($state.current);
这是生成结果的图像
为什么2会产生不同的“当前”物体?怎么会发生这种情况?
这些调用是在解析路由依赖项时在ajax调用中进行的。如果您需要更多代码或上下文,请告诉我。
在Chrome和Firefox中确认了同样的问题
Ajax调用和包装函数(无论如何都没有修改)
normaCtrl.publicNorma = ['$http', '$state', '$stateParams', 'baseUrl', function ($http, $state, $stateParams, baseUrl)
{
var id = $stateParams.id;
return $http.get(baseUrl + "api/public/norma/" + id).then(
function (response) {
console.log($state);
console.log($state.current);
console.log($state.current.title);
return response.data;
}
);
}];
答案 0 :(得分:10)
嗯,这就是那些偶然发现的人的答案。
Console.log在最后执行状态时显示深度可变对象,而不是在调用console.log时状态。
基本上,当使用可变深度对象时,Console.log存储对所述对象的引用,而不是存储对象克隆。
由于存储和可视化之间存在时间差,当您单击箭头进行进一步检查时,您所看到的实际上是对象的当前状态而不是状态调用console.log时的对象。
始终确保使用“对象快照”的一种方法是在可用时拨打Json.stringify
或使用console.dir
。
答案 1 :(得分:1)
怪异。它是一个ECMA 5对象有一个奇怪的吸气剂?普通的$ state调用仍然没有意义。我认为你的GC不仅仅有一些问题......
你确定这些是被记录的电话吗?