ng init中的单/双引号


Single/double quotes in ng-init

假设我们通过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&#039;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&#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;
});

如果您的问题仅限于单引号,这可能会起作用

ng-init='message="Can&#039;t delete item"'

尝试下面的代码,它应该可以工作。

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