AngularJS استخدام التوجيه لمنع أخرى لتنفيذ توجيهات
-
26-12-2019 - |
سؤال
بعض الإجراءات في الزاوي التطبيق يحتاج المستخدم إلى تسجيل.إذا لم يتم تسجيل المستخدم نريد أن تظهر "تسجيل مشروط" ومنع العمل الأصلي.
تلك الإجراءات التي يمكن تشغيلها عبر ng-انقر فوق أو أي دولة أخرى "انقر فوق ملزمة" التوجيه (على سبيل المثال 'مشروط-تبديل واحد).
لذلك وجدت هذا الحل: https://stackoverflow.com/a/16211108/2719044
هذا هو بارد جدا ولكن يعمل فقط مع ng-انقر فوق.
أنا أول من جعل "محطة" الملكية التوجيه الديناميكي ولكن لم يتمكن من القيام بذلك.
لذلك كانت الفكرة أن مجموعة "المحطة" إلى true يدويا منع الافتراضي انقر فوق العمل في التوجيه.
هنا هو بلدي دوم
<!-- This can work with terminal:true and scope.$eval(attrs.ngClick) (see example above) -->
<div user-needed ng-click="myAction()">Do it !</div>
<!-- This doesn't work. I can't manage to prevent the modal-toggle to be executed -->
<div user-needed modal-toggle="my-modal-id-yey">Show yourself modal !</div>
و التوجيه(s) (التي لا تعمل...)
// First try (with terminal:true)
app.directive('userNeeded', function() {
return {
priority: -100,
terminal: true,
restrict: 'A',
link: function(scope, element, attrs) {
element.bind('click', function(e) {
if(isRegistered()) {
// Here we do the action like scope.$eval or something
}
});
}
};
});
// Second try (with stopPropagation)
app.directive('userNeeded', function() {
return {
priority: -100
restrict: 'A',
link: function(scope, element, attrs) {
element.bind('click', function(e) {
if(!isRegistered()) {
e.stopPropagation();
}
});
}
};
});
و لهذا السبب أنا هنا.أي فكرة ؟
شكرا جزيلا.
المحلول
كنت قريبة للغاية.بدلا من stopPropagation كنت في حاجة توقففوراالانتشار.الفرق بين الاثنين هو تلخيصها في هذا ستاكوفيرفلوو الإجابة بواسطة @ديف:
stopPropagation
سيتم منع أي الأم معالجات من في حين أعدمstopImmediatePropagation
سوف تفعل الشيء نفسه ولكن أيضا منع الآخرين من معالجات المنفذة.
وذلك لإصلاح القانون ، كل ما علينا فعله هو مبادلة خارج هذا الأسلوب وفويلا:
app.directive('userNeeded', function() {
return {
priority: -100
restrict: 'A',
link: function(scope, element, attrs) {
element.bind('click', function(e) {
if(!isRegistered()) {
e.stopImmediatePropagation();
}
});
}
};
});
هنا مثال Plunker العامل التعليمات البرمجية.في المثال أنا تعديل التوجيه قليلا للسماح أحداث معينة محددة (مثل user-needed="submit"
) من خلال تمرير قيمة مباشرة element.bind
وظيفة ؛ ومع ذلك ، فإنه الافتراضي 'انقر فوق'.