Directive displaying Error: [$parse:lexerr] after moving template to templateURL

Directive displaying Error: [$parse:lexerr] after moving template to templateURL

当 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 请求并且标记是正确的,但是 lexerr 然后出现在控制台中。

您的 html 不应包含会在 angular $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>

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