角度.js:14195 错误: [$resource:坏成员] 虚线成员路径"@"无效



我正在使用angular.resource js

在那里,我正在尝试访问具有从表单搜索触发的查询参数的获取服务。

如果用户在输入字段中仅使用"@"进行搜索,则它作为查询参数,该参数以"@"字符开头,然后出现异常

提前谢谢。

由于 angular.resource js 中的以下代码

// Helper functions and regex to lookup a dotted path on an object
// stopping at undefined/null.  The path must be composed of ASCII
// identifiers (just like $parse)
var MEMBER_NAME_REGEX = /^(.[a-zA-Z_$@][0-9a-zA-Z_$@]*)+$/;
function isValidDottedPath(path) {
return (path != null && path !== '' && path !== 'hasOwnProperty' &&
MEMBER_NAME_REGEX.test('.' + path));
}
function lookupDottedPath(obj, path) {
if (!isValidDottedPath(path)) {
throw $resourceMinErr('badmember', 'Dotted member path "@{0}" is invalid.', path);
}
var keys = path.split('.');
for (var i = 0, ii = keys.length; i < ii && angular.isDefined(obj); i++) {
var key = keys[i];
obj = (obj !== null) ? obj[key] : undefined;
}
return obj;
}

如果你真的想把它作为你的网址参数。尝试转义@ char,因为这在库中具有特殊含义$resource

通常,当我们只有 @ 作为值时,它会发生这种情况,它会在请求正文中搜索"@"之后的字符串值。 由于它是一个 get 方法,其中角度资源忽略它。非常奇怪的行为。

AngularJs doc: https://code.angularjs.org/1.5.11/docs/api/ngResource/service/$resource

如果参数值以 @ 为前缀,则将从数据对象上的相应属性中提取该参数的值(在调用"非 GET"操作方法时提供)。例如,如果 defaultParam 对象是 {someParam: '@someProp'},则 someParam 的值将是 data.someProp。请注意,调用"GET"操作方法(即不接受请求正文的操作方法)时,将忽略该参数

因此,在调用资源中的任何方法之前,请尝试转义@符号:

paramValue = paramValue.replace(/@/gi, '\@');

同样,您可以在 $httpProvider 拦截器服务的请求方法中发生 api 调用之前删除 scape。

configParams = configParams.replace(/\@/gi, '@');

如果需要更多帮助,请告诉我。

谢谢

最新更新