7
votes

Angularjs: Caractères Newline aux éléments de paragraphe

Au sein de l'angulaire, j'ai besoin de générer une série d'éléments de paragraphe d'un bloc de texte contenant des caractèresWLINE?

Je peux penser à quelques façons de le faire. Cependant, je me demande s'il existe une manière "officielle" angulaire ou que l'approche la plus élégante serait dans le contexte angularjs.

un exemple

de: < BlockQuote>

Lorem Ipsum Dolor Sit Amet, conseceturer adipiscing Elit. \ n
Sed diam Nibh Nibh euismod TinMEnt Ut Laoreet Dolore. \ n
Magna Aliquam Erat Volutpat. UT Wisi Enim Aimfl tofl Veniam.

à: xxx

Je peux penser à un certain nombre de façons de faire ceci:

  1. Modifiez le texte dans le contrôleur (bien que je préfère éviter de modifier mes modèles)
  2. en utilisant une directive et générer des paragraphes dans une fonction de liaison (semble trop lourd).
  3. Utilisation d'un filtre (mon favori actuel) pour créer un tableau à tuyau dans NG-REPEAT


0 commentaires

4 Réponses :


13
votes

La meilleure solution que je puisse penser était de créer un filtre: xxx pré>

Ceci prend un bloc de texte et crée un nouvel élément de tableau pour chaque paragraphe. P>

Ce tableau peut ensuite être branché dans une directive NG-REPEAT: P>

<p ng-repeat="paragraph in textBlock|nlToArray track by $index">{{paragraph}}</p>


1 commentaires

On dirait un peu de frais généraux et dangereux.



5
votes
var myApp = angular.module('myApp', ['ngSanitize']);
myApp.controller('myCtrl', function($scope){
    $scope.myText = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\nSed diam nonummy nibh euismod tincidunt ut laoreet dolore.\nMagna aliquam erat volutpat. Ut wisi enim ad minim veniam."
});
myApp.filter('nl2p', function () {
    return function(text){
        text = String(text).trim();
        return (text.length > 0 ? '<p>' + text.replace(/[\r\n]+/g, '</p><p>') + '</p>' : null);
    }
});
http://jsfiddle.net/moderndegree/934aZ/

4 commentaires

Cette approche coupera la chaîne puis placez le HTML dans le DOM à l'aide de la ngsanitize angulaire. Cela devrait en faire un peu plus difficile pour quelqu'un d'essayer d'insérer un balisage malveillant.


Le seul inconvénient de cette approche est qu'il nie les éléments de paragraphe résultants dans un autre élément DOM. Dans votre exemple un . Mais c'est un peuple assez mineur.


N'oubliez pas d'inclure le module NgSanitize et le fichier JS


Fantastique, mais la regex doit se terminer par G pour effectuer le remplacement plus d'une fois (par exemple / [\ r \ n] + / g ). Linky: jsfiddle.net/934az/47



0
votes

Ceci est un piratage stupide, mais cela fonctionne autour des paragraphes étant entourés d'autres balises, telles que

: xxx


0 commentaires

2
votes

Vous pourriez résoudre ce problème avec une propriété CSS et utilisez {{texte}} dans p html élément xxx


1 commentaires

C'est vraiment une très bonne approche alternative. Il n'ajoute pas plusieurs paragraphes tels que demandés, mais dans la plupart des cas, le résultat visuel est le même.