让我们说我们将初始数据从php传递给Angular'由Mustache查看,数据是一些包含引号的字符串,例如"无法删除项目" 。
默认情况下,Mustache会将单引号转换为'
,如:
ng-init="message='Can't delete item'"
但这会导致某种Angular解析问题:
Lexer错误:列中的未终止报价... [']在表达式中[message ='无法删除项目']
我无法使用Moustache'三重曲线,因为它会像:
ng-init="message='Can't delete item'"
输出中出现相同的错误。
普兰克:http://plnkr.co/edit/GCq4gLrD1NxxCvAsjHy9?p=preview
我们怎样才能在Mustache舞台上优雅地解决它?
答案 0 :(得分:1)
逃避引用:
ng-init="message='Can\'t delete item'"
答案 1 :(得分:1)
使用backslash \
来逃避单引号:
ng-init="message='Can\'t delete item'"
答案 2 :(得分:1)
尝试切换双引号和单引号。
所以而不是
ng-init="message='{{delete_message}}'"
尝试
ng-init='message="{{delete_message}}"'
答案 3 :(得分:1)
我创建了一个指令来放置你的内容,它会将指令体分配给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>
答案 4 :(得分:1)
我今天遇到了这个问题,但我没有找到答案。但这段代码对我有用。
<?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模板。希望这有助于其他人。
答案 5 :(得分:0)
我相信您错误地使用了init。来自ngInit docs:
ngInit的唯一合适用途是用于别名ngRepeat的特殊属性,如下面的演示所示。除了这种情况,您应该使用控制器而不是ngInit来初始化作用域上的值。
要从服务器端传递值,我认为您应该使用$http中的angular.Module(AJAX)或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;
});
答案 6 :(得分:0)
如果您的问题仅限于单引号
,则可能会有效ng-init='message="Can't delete item"'
答案 7 :(得分:0)
尝试下面应该有效的代码。
<body ng-controller="MainCtrl" ng-init='message="Can't delete item"'>
<p>Message: {{message}}</p>
</body>