Angular指令参数长度限制

17 浏览
0 Comments

Angular指令参数长度限制

参数发送到指令时是否有长度限制?这是我的代码:

header = JSON.stringify(header);
columnObj = JSON.stringify(columnObj);
$compile('')(scope);

指令:

a.directive('columnFilterSort', function () {
return {
    link: function (scope, elem, attrs) {
        var columnObj = JSON.parse(attrs.columnobj);
        var header = JSON.parse(attrs.header);
}
});

columnObj变量看起来没问题,但在var header = JSON.parse(attrs.header)处出错。

检查var header,我发现它不完整。我得到的错误是:

SyntaxError: Unexpected end of input

at Object.parse (native)

请帮忙,谢谢。

0
0 Comments

Angular指令参数长度限制的问题是由于传递的参数过长导致的。解决方法是通过修改编译和指令来解决。

首先,将编译修改为:

$compile('
')(scope);

然后,将指令修改为:

a.directive('columnFilterSort', function () {
    return {
        restrict: 'E',
        scope: {
            'header' : '=',
            'columnobj' : '='
        },
        link: function (scope, elem, attrs) {
            var columnObj = JSON.parse(scope.columnobj);
            var header = JSON.parse(scope.header);
        }
    });

这样就可以解决问题了。更多详情请参考这篇文章:

[https://stackoverflow.com/questions/14687822](https://stackoverflow.com/questions/14687822)

另外,你也可以在第一个JS部分将JSON传递给全局作用域,然后在指令中使用,而不使用隔离作用域。

这个解决方法的原因是编译需要用引号将JSON包裹起来。通过在指令中使用双向绑定,将JSON传递给隔离作用域,而不是使用属性。

如果你不使用隔离作用域,可能会导致无法进入指令的问题。

还有一个错误是Error: [$parse:ueoe],请检查最后一次编辑中将column-filter-sort放置在元素中,因为指令中限制了这一点。

如果你将编译修改为$compile('')(scope),仍然无法进入指令。控制台显示相同的解析错误。

只有在注释掉隔离作用域时,才能进入指令。

请问你在哪里使用编译?你能提供相关代码吗?

0