2

親よりも子を優先してコンパイルするにはどうすればよいですか?

たとえば、Markdown をコンパイルするディレクティブがあり、markdown ファイルを分けておきたいとします。だから私はできました:

<div markdown>
    <ng-include src='"someMarkdownFile.md"'></div>
</div>

問題は、最初に ng-include をコンパイルする方法がわからないことです。

それらを同じ要素に配置して、markdownディレクティブをterminalに設定しようとしました。

<div markdown ng-include src='"someMarkdownFile.md"'></div>

ただし、ng-include は端末であるため、markdown ディレクティブの前に実行されることはありません。

これは可能ですか?

答え

答えは、できません。ブランドンの答えは私の特定のケースに役立ちますが、Angular でこれを行う方法はないようです。

以下の Brandon の回答を説明するために、HTML を次のように変更しました。

<div markdown src='someMarkdownFile.md'></div>

そして、ディレクティブにsrc属性をチェックさせました。存在する場合は、次を実行します。

    $http.get(src, {cache: $templateCache}).success(function(resp) {
      return element.html(resp);
    }).error(function() {
      throw new Error("Could not load " + src + " from markdown directive");
    });
4

1 に答える 1

1

これに対処するには、いくつかの方法があります。

まず、コンテンツがリロードされるたびngInclude にイベントを発行します。

$includeContentLoaded

ngInclude コンテンツがリロードされるたびに発行されます。

タイプ:
エミット

ターゲット:
現在の ngInclude スコープ

したがって、markdownディレクティブはこのイベントを監視し、マークダウンを再コンパイルできます。

app.directive('markdown', function() {
  return {
    link: function(scope, elem, attrs) {
      // ...
      scope.$on('$includeContentLoaded', function() {
        recompileMarkdown();
      });
    }
  }
});

もちろん、別のオプションはまったく使用せずngIncludemarkdownディレクティブに独自のマークダウン ファイルを取得させたり、キャッシュ用に$templateCache他のキャッシュを使用したりすることもできます。$cacheFactory(これはおそらく私が目指す方向です。ngInclude作業に取り掛かったとしても、マークダウンにはまだ DOM 要素が残っています。長期的には、自分でコンテンツを制御する方が簡単だと思います。)

于 2013-05-29T16:17:29.027 に答える