Angular-styleguide: 構文としてコントローラーを使用した$ scope.watch

作成日 2015年07月17日  ·  12コメント  ·  ソース: johnpapa/angular-styleguide

構文としてコントローラーを使用する例(スタイルY032 )では、ビューにSomeController as vmがある場合にのみスニペットが機能するため、コントローラーをビューに結合することを明確にしません。

私にとって、これはコントローラー全体を構文として使用する場合の欠点です。 $ scope.watchの関数表記を使用してこれを解決するか、現在のアプローチを使用して問題について何かを書くことができます。

Angular 1 enhancement help wanted

最も参考になるコメント

これは議論の要約だと思います


controllerAs $ watch

[スタイル[Y999](#style-y999)]
  • $ scope。$ watchの使用は避けてください。 代わりに、ng-changeまたはカスタムディレクティブを使用してください。

    _Why?_:時計はテストが難しく、$ digestループごとに評価されるため、パフォーマンスも低下します。

    /* avoid */
    function SomeController($scope) {
    var vm = this;
    
    $scope.$watch(function () {
        return vm.title;
    }, doSomething);
    
    function doSomething() {
    }
    }
    
    <!-- recommended -->
    <input type="text" ng-model="vm.title" ng-change="vm.doSomething()"/>
    
    /* recommended */
    function SomeController() {
      var vm = this;
      vm.doSomething = doSomething;
    
      function doSomething() {
      }
    }
    

全てのコメント12件

よろしければPR

controller as$scope.$watchを使用して問題について書くべきだと思いますか、それとも次のような関数表記を導入する必要がありますか

$scope.$watch(function () {
    return vm.title;
}, function(current, original) {
    $log.info('vm.title was %s', original);
    $log.info('vm.title is now %s', current);
});

古い例を置き換えるか、両方を比較する必要がありますか?

私があなたの構造を理解しているなら、私は両方を比較し、あなたの回避と推奨される構文を使用します。

Brrrr。 コントローラ内でアンチパターンを監視します。 とにかく、この例では実際には必要ありません。 変更イベントバインディングを追加する方がよいでしょう(そして、それがNg2で行うことになると思います)。

私はこの議論が「ControllerAs」のサブセクションであることを望みます。それは人々にコントローラーの内部を見ないように促すことから始まります。 次に、「必要な場合」は、 @ Jandalfバージョンを使用し、「vm.title」式を評価するリスクについてあまり大したことはしません。 「このようにしてください」とだけ言ってください。

このプレビューについてどう思いますか:

controllerAsと$ watch

[スタイルY999 ] //次の空き番号は?

注:ダイジェストサイクルに負荷がかかるため、注意して時計を作成してください。 代わりにngChange使用してください。

  • $scope.$watchの関数表記を使用して、変更を監視します

_理由?_:コントローラーを別の値にバインドしてからvm

したがって、本当に値を監視する必要がある場合は、次のパターンを使用してください。

  <input ng-model="vm.title"/>
  function SomeController($scope, $log) {
      var vm = this;

      $scope.$watch(function () {
          return vm.title;
      }, function(current, original) {
          $log.info('vm.title was %s', original);
          $log.info('vm.title is now %s', current);
      });
  }

うーん

コントローラでの監視は避ける必要があることを明確にする必要があります。 代わりにngChangeを使用してください。 または、時計をディレクティブに移動します。 考え?

次に、私がそこにあるものを置き換えたり更新したりする、controllerAでwatchを使用する方法の新しいルール。

ジョン、あなたに同意します。

コントローラ内の監視を回避する必要があること、および変更イベントをリッスンするか、ディレクティブを作成することが望ましいかどうかは十分に明確ではありません。 このアドバイスにも「理由」があるはずです(コントローラーの時計が悪い理由)

それを行う方法に関するアドバイスは、_必要な場合_は別のポイントであり、繰り返し強い警告から始める必要があります。

それでは、なぜそうするのかというケースを見てみたいと思います。 ここには表示されません。 実際には考えられません。 あなたはできる?

そのような例がなければ、私はこのアドバイスを含めることをまったく躊躇します。

また、このテキストの「理由」は私を混乱させました。 これは、「vm」名への依存を回避する特定の手法の「理由」です。 これは本当の理由の二次的なものであり、それがコントローラーで見たことがある理由です。 「このようにしないでください」という例が前に付いている場合にのみ意味があります。

確かにもっと仕事が必要だと思います。

誰か提案?

これは議論の要約だと思います


controllerAs $ watch

[スタイル[Y999](#style-y999)]
  • $ scope。$ watchの使用は避けてください。 代わりに、ng-changeまたはカスタムディレクティブを使用してください。

    _Why?_:時計はテストが難しく、$ digestループごとに評価されるため、パフォーマンスも低下します。

    /* avoid */
    function SomeController($scope) {
    var vm = this;
    
    $scope.$watch(function () {
        return vm.title;
    }, doSomething);
    
    function doSomething() {
    }
    }
    
    <!-- recommended -->
    <input type="text" ng-model="vm.title" ng-change="vm.doSomething()"/>
    
    /* recommended */
    function SomeController() {
      var vm = this;
      vm.doSomething = doSomething;
    
      function doSomething() {
      }
    }
    

controllerAsを使用してディレクティブ内の$ watchを文書化しますか? リンクやリソースをお勧めできますか?

PRに興味のある人はいますか?

私の古い問題をクリーンアップします

このページは役に立ちましたか?
0 / 5 - 0 評価