1

angular.js 内の ngForm (フォーム) ディレクティブ定義では、コンパイル関数は関数のみを返しますpreLinkpreLinkなぜcommon ではなくすべきなのpostLinkですか?

次のコードは angular.js マスター ブランチからのものです。

var formDirective = {
  name: 'form',
  restrict: isNgForm ? 'EAC' : 'E',
  controller: FormController,
  compile: function ngFormCompile(formElement) {
    // Setup initial state of the control
    formElement.addClass(PRISTINE_CLASS).addClass(VALID_CLASS);
    return {
      pre: function ngFormPreLink(scope, formElement, attr, controller) {
        // if `action` attr is not present on the form, prevent the default action (submission)
        if (!('action' in attr)) {
          // we can't use jq events because if a form is destroyed during submission the default
          // action is not prevented. see #1238
          //
          // IE 9 is not affected because it doesn't fire a submit event and try to do a full
          // page reload if the form was destroyed by submission of the form via a click handler
          // on a button in the form. Looks like an IE9 specific bug.
          var handleFormSubmission = function(event) {
            scope.$apply(function() {
            controller.$commitViewValue();
            controller.$setSubmitted();
          });
        event.preventDefault();
        };
        ...
4

1 に答える 1

3

リンク前関数は子ディレクティブの前に実行されるため、子ディレクティブで使用するデータを準備するのに適しています。この場合、子ディレクティブがリンク後の関数でフォームを送信する場合に備えて、送信ハンドラーを準備すると思います。

実際には、リンク関数の実行順序は次のとおりです。

  1. 親プレリンク
  2. 子プレリンク
  3. 子投稿リンク
  4. 親投稿リンク
于 2015-01-19T15:07:49.543 に答える