لماذا لا يمكنني طلب توجيه الطفل من توجيه أحد الوالدين؟

StackOverflow https://stackoverflow.com//questions/21005911

  •  20-12-2019
  •  | 
  •  

سؤال

هذا plunkr يلقي هذا الخطأ:

Error: [$compile:ctreq] Controller 'childDirective', required by directive 'parentDirective', can't be found!

يمكنني حل هذه المشكلة، لكن لدي فضول لمعرفة ما إذا كان هذا تصميمًا فرعيًا، ولماذا (الوالد الوحيد مقابل الأطفال المتعددين)؟ولا أرى أي ذكر لهذا القيد في $ng. ترجمة المستندات.

هل كانت مفيدة؟

المحلول

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

لاحظ أن هذا يتم عبر مثيلات وحدة التحكم المرتبطة، وليس عبر التوجيهات.

لقد قمت بتحديث مساهمتك مع أ مثال عملي

angular.module('foo', [])

.directive('parentDirective', function() {
  return {
    controller: function($scope) {

      $scope.childs = {};

      this.registerChild = function(child) {
        $scope.childs[child.name] = child;
      };
    },
    link: function(scope, element, attrs) {}
  };
})

.directive('childDirective', function() {
  return {
    controller: function($scope) {},
    require: ['^parentDirective', 'childDirective'],
    link: function($scope, $element, $attrs, $ctrls) {

      var parent = $ctrls[0];
      var child = $ctrls[1];

      child.name = $attrs.childDirective;

      parent.registerChild(child);
    }
  };
});

نصائح أخرى

لا يمكنك طلب توجيه الطفل، بقدر ما أعرف لا يوجد شيء في Angular يسمح بذلك.يمكنك فقط أن تطلب توجيه الوالدين من الطفل، عن طريق

require: '^parentDirectiveName'

أو توجيه الأخوة، من خلال

require: 'siblingDirectiveName'

لذا نعم، هذا حسب التصميم، أو على الأقل نقص الميزات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top