سؤال

لقد محدد جدا الموضوع مع توجيه بداية مع بعض الحروف (t, u, v, w, y, z).التوجيه يستخدم على select عنصر مشاهدة ngOptions التغييرات.

عندما ngOptions يتم تعبئة البيانات من طلب اياكس و التوجيه اسم يبدأ بحرف معينة, على سبيل المثالث ، الثاني مشاهدة رد الحرائق قبل اختر الخيارات تم إنشاؤها.إذا كان التوجيه اسم يبدأ بحرف مختلفة (a, k, m, n) الثاني مشاهدة رد الحرائق بعد الخيارات التي تم إنشاؤها.

هنا عينة مع أوامر متعددة بدءا من رسائل مختلفة.فتح وحدة التحكم الخاصة بك لمعرفة المشكلة.

<select w-foo ng-model="bar" ng-options="o.name for o in options"></select>
app.controller("test", function ($scope, $timeout) {

    // Emulate ajaxed options
    $timeout(function () {
        $scope.options = [{
            name: "aaa",
            id: 1
        }, {
            name: "bbb",
            id: 2
        }, {
            name: "ccc",
            id: 3
        }];
    }, 500);

});

app.directive("wFoo", function () {
    return {
        require: 'ngModel',
        link: function (scope, element, attrs, ngModel) {
            scope.$watch(attrs.ngOptions.replace(/.*in /, ""), function () {
                console.log("w-foo ngOptions changed", element.html());
            });
        }
    };
});

في التعليمات البرمجية أعلاه ، element.html() سوف تحتوي على واحدة فارغة option في الساعة الأولى الاستدعاء (الأولي هضم) وسوف تحتوي أيضا على واحدة فارغة option في الثانية هضم (عندما اياكس كاملة).

أين هذا السلوك يأتي من ؟

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

المحلول

هناك ثلاث آليات هنا التي تشارك أن يفسر هذا السلوك:

  1. المراقبين يتم تنفيذها في بنفس الترتيب على أن يتم تسجيلهم (ترى رمز $watch طريقة()).

  2. بعد ربط المهام يتم تنفيذها في ترتيب عكسي الأولوية (راجع وثائق priority الملكية).

  3. توجيهات مع نفس الأولوية التي يتم تنفيذها في غير معرف النظام.الافتراضي هو الأولوية 0, لذا كل ما تبذلونه من العرف توجيهات هنا لديهم هذه الأولوية.منذ select التوجيه أيضا أولوية 0, ترتيب التنفيذ هو غير معروف.

    كما لاحظت "undefined" هو المفرط قليلا, و في الواقع أمر التنفيذ هو الترتيب الأبجدي (ترى $compile رمز):توجيهات اسم في بداية قاموس لديك أولوية أعلى.ولكن في رأيي المتواضع ، لأن هذا ليس من قال صراحة في الوثائق ، لا يمكنك الاعتماد على هذا السلوك.

وخلاصة القول هنا هو استخدام بعض الحالات.كل توجيه سجلات مراقب.

  Name  |  Priority  | Watcher order
--------+------------+--------------
A       | 100        | 3rd
B       | 0          | 2nd
C       | none (= 0) | 1st

وبالتالي حل المشكلة بسيط:

  • إذا كنت ترغب في تنفيذ مراقب المخصصة توجيهات بعد على select واحد فقط إعطاء الخاص بك توجيه أولوية أعلى من 0.
  • إذا كنت ترغب في تنفيذ مراقب المخصصة توجيهات قبل على select واحد, حسنا منذ السلبية الأولوية ممنوعة ، لا يمكنك موثوق تفعل ذلك.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top