سؤال

بعض الإجراءات في الزاوي التطبيق يحتاج المستخدم إلى تسجيل.إذا لم يتم تسجيل المستخدم نريد أن تظهر "تسجيل مشروط" ومنع العمل الأصلي.

تلك الإجراءات التي يمكن تشغيلها عبر 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 وظيفة ؛ ومع ذلك ، فإنه الافتراضي 'انقر فوق'.

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