Angular-styleguide: النطاق $ مع وحدة التحكم كتركيب

تم إنشاؤها على ١٧ يوليو ٢٠١٥  ·  12تعليقات  ·  مصدر: johnpapa/angular-styleguide

في مثالك الخاص بالمشاهدة باستخدام وحدة تحكم مثل بناء الجملة ( ستقرن وحدة التحكم في عرضها لأن المقتطف الخاص بك لن يعمل إلا إذا كان هناك SomeController as vm في وجهة نظرك.

بالنسبة لي ، يعد هذا عيبًا في استخدام وحدة التحكم بأكملها كنحو. يمكنك حل هذه المشكلة باستخدام تدوين الدالة في النطاق $ range.watch أو كتابة شيء ما عن المشاكل باستخدام منهجك الحالي.

Angular 1 enhancement help wanted

التعليق الأكثر فائدة

أعتقد أن هذا يلخص المناقشة


تحكم As $ watch

[النمط [Y999] (# style-y999)]
  • تجنب استخدام النطاق $. $ watch. استخدم ng-change أو توجيهًا مخصصًا بدلاً من ذلك.

    _لماذا؟ _: الساعات أصعب في الاختبار وهي أيضًا سيئة للأداء لأنه يتم تقييمها في كل حلقة مختصرة.

    /* 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 كومينتر

العلاقات العامة إذا أردت

هل تعتقد أنه يجب علي الكتابة فقط عن المشكلات باستخدام 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);
});

استبدال المثال القديم أم يجب أن أقارن بينهما؟

إذا فهمت الهيكل الخاص بك ، فسأقارن بين كليهما وأستخدم بناء الجملة الموصى به والتجنب.

بررر. مشاهدة داخل وحدة تحكم نمط مضاد. أنت حقًا لا تحتاجه في هذا المثال على أي حال ؛ سيكون من الأفضل إضافة ربط حدث التغيير (وأعتقد أن هذا ما ستفعله في Ng2).

أفضل أن تكون هذه المناقشة قسمًا فرعيًا من "ControllerAs" والتي تبدأ من خلال حث الأشخاص على تجنب المشاهدة داخل وحدة التحكم. ثم ، "إذا كان لا بد من ذلك" ، فسأختار إصدار

ما رأيك في هذه المعاينة:

تحكم As و $ 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 بدلاً من ذلك. أو انقل الساعة إلى التوجيه. خواطر؟

ثم قاعدة جديدة لكيفية استخدام الساعة مع وحدة التحكم حيث تحل محل أو تحدّث ما لدي هناك.

أتفق معك يا جون.

ليس من الواضح بما فيه الكفاية أنه يجب تجنب مشاهدة في وحدة تحكم وأن الاستماع إلى حدث التغيير أو كتابة توجيه هو المفضل. يجب أن يكون لديك "سبب" لهذه النصيحة أيضًا (لماذا تكون الساعات في وحدات التحكم سيئة)

يجب أن تكون النصيحة حول كيفية القيام بذلك - إذا كان يجب عليك - أن تكون نقطة منفصلة ويجب أن تبدأ بتحذير قوي متكرر ضد.

ثم أود أن أرى حالة لماذا أفعل ذلك على الإطلاق. لا أرى أحد هنا. لا أستطيع التفكير في أحد. هل تستطيع؟

بدون مثل هذا المثال ، سأكون مترددًا في تضمين هذه النصيحة على الإطلاق.

كما أن "لماذا" في هذا النص أربكني. إنه "سبب" للتقنية المحددة لتجنب الاعتماد على اسم "vm". هذا ثانوي بالنسبة للسبب الحقيقي ، ولهذا السبب كنت تشاهد في أي وقت مضى في وحدة تحكم. يكون منطقيًا فقط إذا سبقه مثال "لا تفعل ذلك بهذه الطريقة".

أعتقد أن هناك المزيد من العمل للتأكد ولكنه ضروري.

اقتراح أي شخص؟

أعتقد أن هذا يلخص المناقشة


تحكم As $ watch

[النمط [Y999] (# style-y999)]
  • تجنب استخدام النطاق $. $ watch. استخدم ng-change أو توجيهًا مخصصًا بدلاً من ذلك.

    _لماذا؟ _: الساعات أصعب في الاختبار وهي أيضًا سيئة للأداء لأنه يتم تقييمها في كل حلقة مختصرة.

    /* 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() {
      }
    }
    

هل توثق $ watch داخل التوجيه باستخدام controllerAs؟ هل يمكنك أن تنصح برابط أو مورد؟

أي شخص مهتم في إقامة علاقات عامة؟

تنظيف مشاكلي القديمة

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات