function a() {
var b = ["b"];
console.log(b);
//console.log(b.slice());
b = b.push("bb");
}
a();
Run Code Online (Sandbox Code Playgroud)
在一个"完美"的世界里,你会认为它console.log会表现出来["b"],但是["b", "bb"]尽管"bb"直到事后才被推迟,但它仍然显示出来.
如果你这样做console.log(b.slice());,你将获得所需的结果["b"].这是为什么?这种并发症背后的原因是什么?我只是想更好地理解这一点,所以我可以更好地避免它发生.
*注意我在最近的一个问题中遇到了同样的问题,但这是一个更简洁的例子.@RightSaidFred引领我到这一点,到目前为止一直是一个巨大的帮助.
我有这种状态:
.state('admin.category',{
url: '/category',
templateUrl:'views/admin.category.html',
resolve:{
category: ['CategoryLoader', function(CategoryLoader){
return new CategoryLoader();
}]
},
})
Run Code Online (Sandbox Code Playgroud)
这是我所解决的服务。
.factory('CategoryLoader',['Category', '$state', '$q',
//console.log($state)
function(Category, $state, $q){
return function(){
var delay = $q.defer();
Category.get({cat_id:$state.params.id}, //not working
function(category){
delay.resolve(category);
},
function(){
//delay.reject('Unable to fetch category ' + $state.params.cat_id)
});
return delay.promise;
}
}]);
Run Code Online (Sandbox Code Playgroud)
如果将$ state.params.id更改为数字,则一切正常。如果在服务中管理$ state,我将获得所有信息,包括参数。但我似乎无法使用它。使用我在其他项目中使用过的$ route.current.params.id应该是等效的。我如何使用ui-router做同样的事情?
更新:更多信息
父状态:
.state('admin',{
abstract: true,
url: '/admin',
templateUrl:'views/admin.html'
})
Run Code Online (Sandbox Code Playgroud)
类别工厂:
factory('Category', function($resource){
return $resource('/api/category/byId/:id/', {id: '@id'});
})
Run Code Online (Sandbox Code Playgroud)
如果需要的话,我会摆一个小提琴