0

この例を見つけるのに苦労していますが、それほど難しくはないようです。

基本的に、JSON を返す $resource があります。コントローラーでは、データから $scope にいくつかの異なるものを割り当てます。次に例を示します。

$scope.stuff = data.index.stuff

次に、ビューでこのデータに対して ng-repeat を実行します。

私がやりたいことは、「data.index.stuff」で正規表現を実行し、一致を引き出すことです。次に、一致したものを 1 つのスコープ変数に割り当て、残りを別のスコープ変数に割り当てたいと思います。したがって、次のような正規表現が与えられます。

/>>[0-9]{0,6}/g

そして次のようなデータ:

>>4 this is some test data

次のような 2 つの変数に変換したいと思います。

$scope.number = ">>4"

$scope.somedata = "this is some test data"

新しいデータを ng-repeat 経由でループできるようにします。

ご覧いただきありがとうございます。

4

2 に答える 2

0

これは大きな痛みでしたが、ようやく機能しました。サニタイズ モジュールからリンキー フィルターを取得し、それをディレクティブに変更しました。OPで説明されているように、基本的に、特定のパターンで正規表現を介してスコープを2つに変えます。したがって、scope.post.comment だけで開始し、パターンを抽出して別のスコープに配置すると、残りはコメントのままになります。

app.directive('commentHandler', [
  function() {
    return {
      restrict: 'A',
      scope: {
        post: '=',
        thread: '='
      },
      templateUrl: "pages/comment.html",
      controller: function($scope, $sce, $sanitize) {
        re = /(>>(\d{1,4})).*/;

        raw = $scope.post.comment;
        html = [];
        quote = [];

        while (match = raw.match(re)) {
          url = match[2];
          i = match.index;
          addText(raw.substr(0, i));
          addLink(url, match[1]);
          raw = raw.substring(i + match[1].length);
        }
        addText(raw);
        $scope.post.comment = raw;
        $scope.post.quote = $sanitize(quote.join(''))

        function addText(text) {
          html.push(text);
        }

        function addLink(url, text) {
          quote.push('<a ');
          quote.push('href="');
          quote.push('post/' + $scope.thread.id + '/' + url);
          quote.push('">');
          quote.push(text);
          quote.push('</a>');
        }

      }
    };
  }
]);
于 2014-09-07T10:35:36.300 に答える