假设我们通过Mustache将初始数据从php传递到Angular视图,数据是一些包含引号的字符串,如"Can't delete item"。Mustache默认情况下会将单引号转换为类似'
的:
ng-init="message='Can't delete item'"
但这会导致某种角度解析问题:
Lexer错误:列中的引号未终止。。。表达式[message='Can't delete item']中的[']
我不能使用Mustache的三重curlies,因为那样它就会像:
ng-init="message='Can't delete item'"
在输出中具有相同的误差。
Plunk:http://plnkr.co/edit/GCq4gLrD1NxxCvAsjHy9?p=preview
我们如何才能在Mustache舞台上优雅地解决这个问题?
我创建了一个指令来放置您的内容,它将把指令体分配给scope.message变量。
app.directive('myMessageVar',function(){
return{
restrict :'A',
scope:{
message:'=myMessageVar'
},
link: function (scope, iElement, iAttrs) {
scope.message=iElement.text();
iElement.text('');
}
}
})
在HTML 中
<span my-message-var="message">Can't delete item</span>
Plunkr:http://plnkr.co/edit/QRtXLX1IiGS6VV0Rc78I?p=preview
只需转义引号:
ng-init="message='Can''t delete item'"
用backslash '
转义单引号,如下所示:
ng-init="message='Can''t delete item'"
尝试切换双引号和单引号。
所以不是
ng-init="message='{{delete_message}}'"
尝试
ng-init='message="{{delete_message}}"'
我今天遇到了这个问题,但没有找到太多答案。但这段代码对我有效。
<?php $data_slashed = htmlentities(addslashes(html_entity_decode($data,ENT_QUOTES)),ENT_QUOTES); ?>
其中$data
是使用htmlentities
编码的一些数据。
然后你现在可以做这个
<p ng-bind-html= "data" ng-init="data='<?php echo $data_slashed; ?>'" />
我还没有尝试过胡子,但这适用于我的php模板。希望这能帮助其他人。
我认为您使用init不正确。来自ngInit文档:
ngInit的唯一适当用途是对ngRepeat的特殊属性进行混叠,如下面的演示所示。除此之外,您应该使用控制器而不是ngInit来初始化作用域上的值。
对于从服务器端传递值,我认为您应该使用$http(AJAX)或angular中的Module.constant
/Module.value
。单元
例如:
// define a value
app.value('message','Can't delete item');
// define a constant
app.constant('constMessage', 'Can't delete item');
然后,您可以将它们注入到服务或控制器中。例如,对于控制器:
// use it in a controller
app.controller('someController', ['$scope', 'message', 'constMessage',
function($scope, message, constMessage) {
$scope.message = message;
$scope.constMessage = constMessage;
});
如果您的问题仅限于单引号,这可能会起作用
ng-init='message="Can't delete item"'
尝试下面的代码,它应该可以工作。
<body ng-controller="MainCtrl" ng-init='message="Can't delete item"'>
<p>Message: {{message}}</p>
</body>