我的代码运行良好,直到我使用两个单词之间的空格的字符串。 我正在使用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);].
答案 0 :(得分:2)
我认为你的模板上有很多嵌套字符串,事情变得复杂了。但是,在这种情况下,缺少转义函数调用参数,因为它在字符串中并且不作为参数传递,而是作为字符串传递。
var stringAmi =
'<i class="fa fa-user-plus fa-2x" ng-click="demandeAmiNotif('
+ '\'' + $scope.invite + '\''
+ ');"></i>';
但严重的是,它看起来很糟糕,我不知道为什么你必须这样做,但考虑使用不同的方法,一种更容易维护的坚实方法。
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;