错误$ parse:语法标记''是意外的 - 字符串中的空格

时间:2016-12-29 13:30:57

标签: angularjs syntax

我的代码运行良好,直到我使用两个单词之间的空格的字符串。 我正在使用AngularJs。

stringAmi = '<i class="fa fa-user-plus fa-2x" ng-click="demandeAmiNotif(' + $scope.invite + ');"></i>';

$ scope.invite是我保留用户名称的字符串,如:“Victor Hugo” 我有这个错误:

Error: [$parse:syntax] Syntax Error: Token 'Hugo' is unexpected, expecting [)] at column 22 of the expression [demandeAmi(Victor Hugo);] starting at [Hugo);].

1 个答案:

答案 0 :(得分:2)

我认为你的模板上有很多嵌套字符串,事情变得复杂了。但是,在这种情况下,缺少转义函数调用参数,因为它在字符串中并且不作为参数传递,而是作为字符串传递。

var stringAmi = 
    '<i class="fa fa-user-plus fa-2x" ng-click="demandeAmiNotif(' 
    + '\'' + $scope.invite + '\''
    + ');"></i>';

但严重的是,它看起来很糟糕,我不知道为什么你必须这样做,但考虑使用不同的方法,一种更容易维护的坚实方法。

&#13;
&#13;
angular.module('myApp', [])
    .controller('myController', function($scope) {
        $scope.invite = 'Vitor Hugo';
        $scope.demandeAmiNotif = function(name) {
            console.log(name);
        };
        $scope.stringAmi =
            '<button ng-click="demandeAmiNotif(' + '\'' + $scope.invite + '\'' + ');">Click this!</button>';
    })
    .directive('bindHtmlCompile', function($compile) {
        return {
            restrict: 'A',
            link: function(scope, element, attrs) {
                scope.$watch(function() {
                    return scope.$eval(attrs.bindHtmlCompile);
                }, function(value) {
				
                    element.html(value && value.toString());
					
                    var compileScope = scope;
                    if (attrs.bindHtmlScope) {
                        compileScope = scope.$eval(attrs.bindHtmlScope);
                    }
                    $compile(element.contents())(compileScope);
                });
            }
        };
    });

angular.element(function() {
    angular.bootstrap(document, ['myApp']);
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.0/angular.js"></script>
<div ng-controller="myController">
    <div bind-html-compile="stringAmi"></div>
</div>
&#13;
&#13;
&#13;