将模板移动到templateURL后,指令显示错误:[$ parse:lexerr]

时间:2015-06-01 10:37:17

标签: angularjs angularjs-scope angularjs-ng-repeat ng-repeat angular-directive

当HTML标记写在指令的模板部分时,我有一个没有任何问题的指令。

我刚刚在.html文件中移动了HTML标记,并且在页面加载时,我看到了:

Error: [$parse:lexerr] http://errors.angularjs.org/1.3.14/$parse/lexerr?p0=Unexpected%20next%20character%20&p1=s%2016-16%20%5B%5C%5D&p2=option.name%20%3D%3D%3D%20%5C'choices%5C'

原始指令:

app.directive('myDirective', function () {
    return {
            restrict: 'E',
            scope: {
                data: "="
            },
            template: '<p>' +
            '<div ng-repeat="select in data.output">' +
            '<div ng-if= "select.name === \'choices\'">' +
            '<p ng-repeat="choice in select.value"><label><input type="radio" ng-model="data.input[0].value" ng-value="$index" >{{choice}}</label></p>' +
            '</div>' +
            '</div>' +
            '</p>'
        }
    }
);

新:

app.directive('myDirective', function () {
    return {
            restrict: 'E',
            scope: {
                data: "="
            },
            templateUrl: 'home/mydirective.html'
        }
    }
);

我的页面加载我可以看到mydirective.html的http请求,并且标记是正确的,但是勒克斯随后出现在控制台中。

2 个答案:

答案 0 :(得分:1)

你的html不应该包含在角色$compile该模板时会混乱的连接。它应该是简单的HTML。

<强> mydirective.html

<p>
    <div ng-repeat="select in data.output">
        <div ng-if="select.name === 'choices'">
            <p ng-repeat="choice in select.value">
                <label>
                    <input type="radio" ng-model="data.input[0].value" ng-value="$index">{{choice}}</label>
            </p>
        </div>
    </div>
</p>

答案 1 :(得分:0)

在我的情况下,这与在\'文件中使用带有反斜杠(.html)的单引号有关。当使用template将html直接放在指令中时,它运行良好。 但是当它被放入一个单独的.html文件并使用templateUrl时,它会引发错误。因此,将ng-class="{\'something\'}"更改为ng-class="{'something'}"会为我修复此问题。希望这可以节省其他人几个小时。