1

スコープ内の変数を複数回監視する textAngular コードがありますか? この時計を一度だけ作成する簡単な方法はありますか、それとも存在することを検出できますか?

コードのセクションは次のとおりです。

 taRegisterTool('fontColor', {
    display: "<button colorpicker type='button' class='btn btn-default ng-scope'  title='Font Color'  colorpicker-close-on-select colorpicker-position='bottom' ng-model='fontColor' style='color: {{fontColor}}'><i class='fa fa-font '></i></button>",
    action: function (deferred) {
      var self = this;
      self.$watch('fontColor', function (newValue) {
        self.$editor().wrapSelection('foreColor', newValue);
      });
      self.$on('colorpicker-selected', function () {
        deferred.resolve();
      });
      self.$on('colorpicker-closed', function () {
        deferred.resolve();
      });
      return false;
    }
  });

このボタンがクリックされるたびに、このアクションが実行されます。この $watch により、複数のインスタンスが作成され、存続します。

以下の「npe」による有益なコメントに基づいて、時計が複数回作成されないようにコードを修正しました。

新しいコード:

taRegisterTool('fontColor', {
        display: "<button colorpicker type='button' class='btn btn-default ng-scope'  title='Font Color'  colorpicker-close-on-select colorpicker-position='bottom' ng-model='fontColor' style='color: {{fontColor}}'><i class='fa fa-font '></i></button>",
        action: function (deferred) {
          var self = this;
          if (typeof self.listener == 'undefined') {
            self.listener = self.$watch('fontColor', function (newValue) {
              console.log(newValue);
              self.$editor().wrapSelection('foreColor', newValue);
            });
          }
          self.$on('colorpicker-selected', function () {
            deferred.resolve();
          });
          self.$on('colorpicker-closed', function () {
            deferred.resolve();
          });
          return false;
        }
      });

あなたの洞察に感謝します!

4

1 に答える 1

0

https://stackoverflow.com/users/1344008/npeからのコメントと提案されたログメッセージの追加に基づいて、この例では、私が理解した時計が複数回作成されていることは明らかであり、ログ出力を見ると: すべての監視が追加されることは明らかであり、まったく同じ変数が監視されている場合でも、削除するには、追加時に返されるリスナーを追跡する必要があります。これは完全に理にかなっています...私はそれほど明確に考えていませんでした:-)そこで、この非効率性を取り除くためにコードを修正しました。これを見た人に感謝します。

于 2015-05-04T20:01:40.707 に答える