صالحة التوجيه أسماء
-
21-12-2019 - |
سؤال
لقد محدد جدا الموضوع مع توجيه بداية مع بعض الحروف (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
في الثانية هضم (عندما اياكس كاملة).
أين هذا السلوك يأتي من ؟
المحلول
هناك ثلاث آليات هنا التي تشارك أن يفسر هذا السلوك:
المراقبين يتم تنفيذها في بنفس الترتيب على أن يتم تسجيلهم (ترى رمز
$watch
طريقة()).بعد ربط المهام يتم تنفيذها في ترتيب عكسي الأولوية (راجع وثائق
priority
الملكية).توجيهات مع نفس الأولوية التي يتم تنفيذها في غير معرف النظام.الافتراضي هو الأولوية
0
, لذا كل ما تبذلونه من العرف توجيهات هنا لديهم هذه الأولوية.منذselect
التوجيه أيضا أولوية0
, ترتيب التنفيذ هو غير معروف.كما لاحظت "undefined" هو المفرط قليلا, و في الواقع أمر التنفيذ هو الترتيب الأبجدي (ترى
$compile
رمز):توجيهات اسم في بداية قاموس لديك أولوية أعلى.ولكن في رأيي المتواضع ، لأن هذا ليس من قال صراحة في الوثائق ، لا يمكنك الاعتماد على هذا السلوك.
وخلاصة القول هنا هو استخدام بعض الحالات.كل توجيه سجلات مراقب.
Name | Priority | Watcher order
--------+------------+--------------
A | 100 | 3rd
B | 0 | 2nd
C | none (= 0) | 1st
وبالتالي حل المشكلة بسيط:
- إذا كنت ترغب في تنفيذ مراقب المخصصة توجيهات بعد على
select
واحد فقط إعطاء الخاص بك توجيه أولوية أعلى من0
. - إذا كنت ترغب في تنفيذ مراقب المخصصة توجيهات قبل على
select
واحد, حسنا منذ السلبية الأولوية ممنوعة ، لا يمكنك موثوق تفعل ذلك.