ng-init中的单引号/双引号

时间:2014-11-05 12:38:03

标签: php angularjs mustache template-engine mustache.php

让我们说我们将初始数据从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舞台上优雅地解决它?

8 个答案:

答案 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&#039;t delete item</span>

Plunkr: http://plnkr.co/edit/QRtXLX1IiGS6VV0Rc78I?p=preview

答案 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&#039;t delete item');

// define a constant
app.constant('constMessage', 'Can&#039;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&#039;t delete item"'

答案 7 :(得分:0)

尝试下面应该有效的代码。

<body ng-controller="MainCtrl" ng-init='message="Can&#039;t delete item"'> <p>Message: {{message}}</p> </body>