我正在尝试构建一个通用的过滤器,它需要能够处理 - 基于配置 - 参数。资源实例和服务。
我有以下工厂代码:
angular.module('sample').factory('Sample', function($resource) {
var methods = {
search: {
method: 'POST',
isArray: true
}
}
var Sample = new $resource('/sample', methods);
Sample.prototype.elasticFilter = function (search) {
var query = {
query: {
filtered: {
query: {
wildcard: {
name: '*' + search.toLowerCase() + '*'
}
}
}
}
}
return this.$search(query);
}
return Sample;
});
现在如果我在我的指令中执行以下操作:
scope.search = function (search) {
Sample.elasticFilter(search).$promise.then(function () {
handle
});
这导致
TypeError: Cannot read property 'then' of undefined
打印Sample.elasticFilter(search)
,结果直接为Promise
。
修改指令以直接关闭Sample.elasticFilter(search).then
导致:
TypeError: value.push is not a function
。
对于非实例资源(例如NOT not up up,而不是直接服务),.$promise
工作正常。
为什么会这样?我该如何解决这个问题?资源什么时候有$ promise,什么时候没有?
答案 0 :(得分:0)
这似乎是“功能”https://github.com/angular/angular.js/issues/11767
真正解决此问题的唯一方法是不在实例级资源方法上使用isArray。