2014-11-05 28 views
3

假設我們正在將初始數據從php傳遞到Angular的Mustache視圖,並且數據是一些包含引號的字符串,如「無法刪除項目」。 鬍子默認轉換的單引號的',如:ng-init中的單/雙引號

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

但導致某種角度分析問題:

Lexer Error: Unterminated quote at columns ... ['] in expression [message='Can't delete item']

我不能用鬍子」三重花括號,因爲那會如:

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

與輸出中的錯誤相同。

普拉克:http://plnkr.co/edit/GCq4gLrD1NxxCvAsjHy9?p=preview

我們如何優雅地解決它的鬍鬚階段?

+1

你應該澄清你的問題的標題。你能不能從服務器替換'''通過'\''和''"通過'\「'之前的角度解析? – glepretre 2014-11-06 08:22:47

+0

我不能,它是未來‘破’ – Cherniv 2014-11-06 08:35:42

+0

無法初始化您從您的控制器值(或指令的鏈接功能)? – 2014-11-10 09:09:28

回答

1

只是逃避報價:

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

我不能這樣做,因爲HTML未來已經從服務器 – Cherniv 2014-11-05 12:55:41

1

逃避單引號與backslash \這樣的:

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

打破了esacping雙引號 – Giwwel 2014-11-05 12:44:43

+0

我不能這樣做,因爲HTML未來已經從服務器 – Cherniv 2014-11-05 12:54:25

+0

打破,如果你使用PHP從服務器獲取數據同樣的事情,請嘗試'htmlspecialchars_decode' – Giwwel 2014-11-05 13:00:26

0

我相信你在使用init不正確。從ngInit文檔:

The only appropriate use of ngInit is for aliasing special properties of ngRepeat, as seen in the demo below. Besides this case, you should use controllers rather than ngInit to initialize values on a scope.

對於從服務器端傳遞價值,我認爲你應該要麼使用$http(AJAX)或Module.constant/Module.valueangular.Module

例如:

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

謝謝我知道'價值'和'常量',我用我的另一個項目(http://stackoverflow.com/questions/18097923/angularjs-getting-data-inserted-in-dom/18097924),但在這個特定的項目我只能使用'ng-init'指令來傳遞數據 – Cherniv 2014-11-14 13:09:55

0

嘗試切換雙引號和單引號。

所以不是

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

嘗試

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

謝謝,但這種方式如果我在我的'delete_message'中有雙引號,錯誤會再次出現 – Cherniv 2014-11-14 14:49:40

0

如果你的問題是受限於單引號

ng-init='message="Can't delete item"' 
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

+0

謝謝,但不幸的是我不能改變標記的結構 – Cherniv 2014-11-20 14:04:43

0

試試下面的代碼它應該工作。

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

0

我這個問題今天碰到和我沒有找到太多的答案。但是這段代碼適合我。

<?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模板。希望這可以幫助別人。