我刚刚和Angularjs擦肩而过.我有一个问题,我认为与承诺有关.
假设我加载路径'A',它通过它的控制器发出几个ajax请求:
allSites = AllSites.query({ id:categoryID });
allSites.$promise.then(function(allSites){
//add stuff to the scope and does other things
//(including making another ajax request)
});
Run Code Online (Sandbox Code Playgroud)
然后我有路由'B'通过它的控制器使它自己的API请求:
$scope.categories = Category.query();
Run Code Online (Sandbox Code Playgroud)
这是路线'A'目前使用的工厂服务:
.factory('AllSites',function($resource){
return $resource('api/categorySites/:id');
});
Run Code Online (Sandbox Code Playgroud)
当我第一次查看路线'A'但在'A'完成加载之前切换到'B'时,路线'B'坐下并等待'A'中最初请求的所有内容完成(实际上,查询()请求已经完成,但是直到来自'A'的那个,它才会解决,在那时,内部的东西.then()继续发生,即使我不需要它,因为我现在在另一条路线上.
正如您在我的devtools时间轴中看到的那样,绿线表示我何时切换到路线'B'.路由'B'的请求直到上面的两个请求(请求通常非常快)才解决.(此时我可以将视图用作用户).然后,在此之后,更多的承诺将从路线'A'解决.

我到处寻找答案,只能找到想要"推迟"路线加载的人,直到承诺得到解决.但就我而言,我几乎想要相反.我想在切换时杀死这些请求.
这是其他人有同样的,未回答的问题:拒绝Angularjs资源承诺
任何帮助表示赞赏.
我已经安装了EasyPHP WAMP用于本地开发(我没有托管任何网站).
有没有办法为单独的虚拟主机设置自定义php设置?
目前和开箱即用,php.ini文件加载自:C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\binaries\php\php_runningversion\php.ini如果,例如,我可以将自定义php.ini文件放入虚拟主机目录以覆盖原始设置,这将是很好的php.ini这样,我可以更好地模拟一个生产服务器的环境基于每个站点.
我已经看到这个与在线托管帐户的工作.但我无法弄清楚如何在我的机器上完成这项工作.
使用角度2中的新http服务,我想更多地处理我的错误,而不仅仅是在控制台中抛出错误.不幸的是,我似乎无法从catch回调函数中访问我的对象属性.
我的http服务电话:
return this.http.get(this.apiUrl, options)
.map(this.extractData, this)
.catch(this.handleError)
Run Code Online (Sandbox Code Playgroud)
我的handleError回调fn:
handleError (error) {
console.log(this)//undefined!
if(error.status === 401){
this.router.navigate(['/login'])//because `this` is undefined, this does not work
}
...
}
Run Code Online (Sandbox Code Playgroud)
根据rxjs文档,catch不支持第二个thisArg参数,这在map函数中非常有用:
extractData(res) {
console.log(this)//returns the instance of my service class, which is what I want
this.someFunctionInMyService()//works great! In fact, I could call this.router.navigate if I wanted.
return res.json()
}
Run Code Online (Sandbox Code Playgroud)
那么如何在handleError回调中调用或使用我的服务属性呢?
本质上,我试图过滤掉已被“丢弃”的子文档和子子文档。这是我的架构的精简版本:
permitSchema = {
_id,
name,
...
feeClassifications: [
new Schema({
_id,
_trashed,
name,
fees: [
new Schema({
_id,
_trashed,
name,
amount
})
]
})
],
...
}
Run Code Online (Sandbox Code Playgroud)
所以我能够得到我想要的效果feeClassifications。但我正在努力寻找一种方法来产生同样的效果feeClassifications.fees。
因此,这可以按需要工作:
Permit.aggregate([
{ $match: { _id: mongoose.Types.ObjectId(req.params.id) }},
{ $project: {
_id: 1,
_name: 1,
feeClassifications: {
$filter: {
input: '$feeClassifications',
as: 'item',
cond: { $not: {$gt: ['$$item._trashed', null] } }
}
}
}}
])
Run Code Online (Sandbox Code Playgroud)
但我也想过滤嵌套数组fees。我尝试了一些事情,包括:
Permit.aggregate([
{ $match: { _id: mongoose.Types.ObjectId(req.params.id) }},
{ $project: …Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的AngularJS应用程序中实现智能表模块.我比其他人更喜欢这个,主要是因为其他人似乎需要我的控制器中有很多样板代码,我喜欢尽可能地让我的控制器保持干燥.但我对其他可以在没有样板的情况下完成同样事情的模块持开放态度.
它在处理直接的对象数组时效果很好,但如果其中一些对象具有嵌套对象,则过滤和排序会有奇怪的行为.
这将需要一些解释,所以请耐心等待.
首先,这是我的嵌套对象数组(此处为了可读性而缩短):
$scope.products = [
{
'display': 'Live',
'name': 'LC1D09',
'category': 'Motor Control',
'subcategory': 'Contactor',
'manufacturer': 'Telemecanique',
'specs': {
'phase': 3,
'poles': 3
},
'new': {
'price': 158.95
},
'refurbished': {
'price': 145
},
'onlineStores': {
'amazon': true,
'ebay': false
},
'isCool': true
},
{
'display': 'Pending',
'name': 'FA32020',
'category': 'Circuit Breaker',
'subcategory': 'Molded Case',
'manufacturer': 'Square D',
'specs': {
'phase': 1,
'poles': 2
},
'new': {
'price': 217.79
},
'refurbished': {
'price': 192.82
},
'onlineStores': {
'amazon': …Run Code Online (Sandbox Code Playgroud) 我想从字符串末尾删除".php"(如果存在).考虑一下:
$filename = 'index';
rtrim($filename,".php");//returns "index"
$filename = 'search';
rtrim($filename,".php");//returns "searc"
Run Code Online (Sandbox Code Playgroud)
为什么会这样?我觉得它与字母'h'结尾有关 - 'h'在rtrim的字符串中.所以我尝试了一个正则表达式(.php$),看它是否有所作为,但事实并非如此.
angularjs ×2
javascript ×2
php ×2
angular ×1
apache ×1
easyphp ×1
mongodb ×1
mongoose ×1
rxjs ×1
smart-table ×1