I am working on an app that uses AngularJS. My controller looks like this:
function TestCtrl($scope) {
$scope.lines = 'var x=1;\nvar y=2;';
}
My view looks like this:
<div ng-controller="TestCtrl">
<p>
Output:<br />
<code>{{lines}}</code>
</p>
</div>
When the view is rendered, the value in $scope.lines
is rendered on a single line like this:
var x=1; var y=2;
However, I want to display it as:
var x=1;
var y=2;
What am I doing wrong? I tried switching \n
with <br />
, however, that did not work either.
So far, the only way to do it would be using ng-bind-html
(-unsafe
) (check your angular version because you might need to use $sce
) to bind HTML to an element, like this:
<code ng-bind-html-unsafe="lines"></code>
<code ng-bind-html="lines"></code>
but it needs $sce
:
$scope.lines = $sce.trustAsHtml('var x=1;<br />var y=2;');
And of course, use the HTML line break: <br />
Here is a working example: http://jsfiddle.net/3fha088t/
Same example here as a snippet:
function TodoCtrl($scope) {
$scope.lines = 'var x=1;<br />var y=2;';
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js"></script>
<div ng-app>
<div ng-controller="TodoCtrl">
<p>Working version: </p>
<code ng-bind-html-unsafe="lines"></code>
<p>Original version: </p>
<code>{{lines}}</code>
</div>
</div>
Angular 1.2 version, using $sce:
function TodoCtrl($scope, $sce) {
$scope.lines = $sce.trustAsHtml('var x=1;<br />var y=2;');
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app>
<div ng-controller="TodoCtrl">
<p>Working version: </p>
<code ng-bind-html="lines"></code>
<p>Original version: </p>
<code>{{lines}}</code>
</div>
</div>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With