2016-05-23 12 views
7

ho markup come questoCome utilizzare HTML all'interno legano condizionale nel markup

<p>{{ !job.AdditionalNotes ? "No additional notes." : job.AdditionalNotes }}</p> 

Vorrebbe enfasi Nessun Note aggiuntive utilizzando qualcosa di simile.

<p>{{ !job.AdditionalNotes ? <em>"No additional notes."</em> : job.AdditionalNotes }}</p> 

C'è un modo per farlo senza usare ng-if e ng-show per fare questo mantenendo l'operatore ternario?

risposta

2

prima opzione

ottengo questo lavoro nel modo seguente (senza ng-show o ng-if). Sto usando il servizio ng-bind-html e $sce per rendere l'HTML. Dal momento che il messaggio "nessuna nota aggiuntiva" è generico e comune, possiamo facilmente definire nel controller e ottenerlo da un metodo dopo la sanitizzazione.

var app = angular.module("sa", []); 
 

 
app.controller("FooController", function($scope, $sce) { 
 

 
    $scope.jobs = [{ 
 
    name: "Sr. Software Developer" 
 
    }, { 
 
    name: "Software Associates", 
 
    AdditionalNotes: "Remote location" 
 
    }, { 
 
    name: "Front-end developer" 
 
    }]; 
 

 
    $scope.trust = function(text) { 
 
    return $sce.trustAsHtml(text); 
 
    }; 
 

 
    $scope.noNotesMessage = function() { 
 
    return $scope.trust("<em>No additional notes.</em>") 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 

 
<div ng-app="sa" ng-controller="FooController"> 
 
    <ol> 
 
    <li ng-repeat="job in jobs"> 
 
     <strong>{{job.name}}</strong> 
 
     <p ng-bind-html="!job.AdditionalNotes ? noNotesMessage() : trust(job.AdditionalNotes)"></p> 
 
    </li> 
 
    </ol> 
 
</div>

seconda opzione

In alternativa, è possibile scrivere una direttiva:

var app = angular.module("sa", []); 
 

 
app.controller("FooController", function($scope, $sce) { 
 

 
    $scope.jobs = [{ 
 
    name: "Sr. Software Developer" 
 
    }, { 
 
    name: "Software Associates", 
 
    AdditionalNotes: "Remote location" 
 
    }, { 
 
    name: "Front-end developer" 
 
    }]; 
 
}); 
 

 
app.directive('notes', function() { 
 
    return { 
 
    restrict: 'E', 
 
    scope: { 
 
     additional: '=' 
 
    }, 
 
    link: function($scope, element, attr) { 
 
     var html = "<p>" + ($scope.additional || "<em>No additional notes.</em>") + "</p>"; 
 
     element.html(html); 
 
    } 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 

 
<div ng-app="sa" ng-controller="FooController"> 
 
    <ol> 
 
    <li ng-repeat="job in jobs"> 
 
     <strong>{{job.name}}</strong> 
 
     <notes additional="job.AdditionalNotes"></notes> 
 
    </li> 
 
    </ol> 
 
</div>

+0

'ng-if' sarebbe molto meglio che il aggiuntivo '$ sce' dipendenza. Sto cercando un modo più semplice per sfuggire al tag HTML in linea – naveen

+0

Puoi per favore descrivere lo scopo di non usare 'ng-if'? –

+0

@naveen e la seconda opzione? –

Problemi correlati