Одиночные / двойные кавычки в ng-init

Допустим, мы передаем исходные данные из php в Angular ‘с помощью Mustache, и эти данные представляют собой строку, которая содержит кавычки, например «Не могу удалить элемент».
Усы по умолчанию переводят одинарную кавычку в ' лайк:

 ng-init="message='Can't delete item'"

но это вызывает некоторую проблему разбора Angular:

Ошибка лексера: неопределенная кавычка в столбцах … [‘] в выражении [message =’ Can’t delete item ‘]

Я не могу использовать тройные кудри усов, потому что тогда это будет похоже на:

 ng-init="message='Can't delete item'"

с той же ошибкой в ​​выводе.

Plunk: http://plnkr.co/edit/GCq4gLrD1NxxCvAsjHy9?p=preview

Как мы можем элегантно решить это на сцене Усов?

3

Решение

Просто избегайте цитаты:

ng-init="message='Can\'t delete item'"
1

Другие решения

Избегайте одиночной кавычки с backslash \ как это:

ng-init="message='Can\'t delete item'"
1

Попробуйте переключить двойные кавычки и одинарные кавычки.

так вместо

ng-init="message='{{delete_message}}'"

пытаться

ng-init='message="{{delete_message}}"'
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

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 шаблона. Надеюсь, что это поможет кому-то еще.

1

Я полагаю, что вы используете init неправильно. От ngInit документы:

Единственное подходящее использование ngInit — для псевдонимов специальных свойств ngRepeat, как показано в демонстрации ниже. Помимо этого случая, вы должны использовать контроллеры вместо ngInit для инициализации значений в области.

Для передачи значений со стороны сервера, я думаю, вы должны использовать $ HTTP (AJAX) или Module.constant/Module.value от angular.Module.

Например:

// 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;
});
0

Это может сработать, если ваша проблема ограничена одинарными кавычками

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

Попробуйте ниже код, он должен работать.

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

0
По вопросам рекламы [email protected]