نريد إصدار بضع استدعاءات $ http في كتلة تشغيل الوحدة النمطية ، من الناحية المثالية ، يجب أن ينتهي التشغيل فقط بعد $ http وانتهاء المعالجة قبل أن يحدث تجميع dom.
هذا ليس بالأمر السهل ولكن يجب النظر فيه.
الطريقة التي يقوم بها Jasmine بذلك هي عن طريق تعيين علامة ، والتي ستسمح للوظيفة بالعمل وانتظار رد النداء حتى يتم تعيين العلم على true
، أو حتى يتم إطلاق المهلة.
شيء من هذا القبيل في الأساس:
var flag = false;
$http(...).success(flag = true);
$timeout(function () {
flag = true;
// Or add some error handling stuff here
}, 5000);
while (!flag) {};
إنها ليست جميلة ، لكن يجب أن تقوم بالمهمة. لم يتم اختبار الكود أعلاه ، لذلك قد تحتاج إلى تعديله قليلاً. الوقت يتأخر هنا. نأمل أن تحصل على شيء ما حتى يأتي شيء أجمل قليلاً.
+1
على الرغم من ذلك ، يؤدي هذا في الثانية إلى عدم القدرة على رسم شاشة تحميل رائعة باستخدام التوجيهات الزاوية ...
+1
ألا يحل هذا $routeProvider
with resolve
هذا؟ ربما لم أفهم المشكلة ...
هذا هو أكثر من أجل دعم الحرف الأول غير المتزامن. مع ذلك ، لم أعد بحاجة إلى هذا في مشاريعي الحالية.
يقومshahata $routeprovider
بهذا ، ولكن لا تستخدم كل حالة استخدام للوعد run
s المسارات. في حالة الاستخدام الخاصة بي ، إنها للوحدة النمطية التي تغلف توجيهًا ولا علاقة لها بالمسارات.
+1
تحقق مما إذا كانت وظيفة التشغيل تُرجع وعدًا ، ثم قم بالمتابعة فقط عندما يتم حلها. نظرًا لأن runBlocks
عبارة عن مجموعة من الوظائف ، فلا يجب أن يكون الأمر صعبًا على الإطلاق
+1
1+ محرج لأنه تم تجاهل هذا
أي فكرة متى هذا سوف يهبط؟ من المحبط للغاية أن تضطر إلى نقل عناصر التهيئة لحلها في جهاز التوجيه ، ويرجع ذلك أساسًا إلى أن رمز التهيئة أحيانًا يكون محايدًا لعنوان url (المعروف أيضًا باسم ، يجب تهيئته لأي نوع من عناوين URL التي يصل المستخدم إلى SPA الخاص بك)
لا أعتقد أن برنامج Angular سيتلقى أي تحسينات من الآن فصاعدًا. يتم إضافتهم جميعًا إلى angular 2.0
ما هي المدة التي ستظل فيها طريقة نصف التقييم run
متزامنة؟ من الجيد والمفهوم أن config
لا يدعم المكالمات غير المتزامنة ، نظرًا لأنه ليس لديك أي مزودين يقومون بإجراء مكالمات $http
، لكن run
يفعلون ذلك. ابحث عن نوع الاختراقات التي يسببها نقص هذه الميزة (التي كان يجب أن تكون موجودة منذ البداية)
https://github.com/philippd/angular-defirmed-bootstrap/blob/master/src/defirmed-bootstrap.js
إنه محرج
+1
يبحث btford في كيفية دعم حالات الاستخدام حول هذا عبر جهاز التوجيه الجديد بدلاً من كتل التشغيل الداخلية.
+1
+1
+1
+1
المشكلة الرئيسية التي نواجهها هي أن $q
يتم إنشاؤه داخل وحدة يتم تحميلها عند تشغيل runBlocks. هذا يعني أننا سنحتاج إلى استخراج "بعض" الخدمات (أو ربما الوحدات النمطية) بطريقة أو بأخرى وإنشاء تلك الخدمات أولاً ثم الحصول على مسار ثانٍ يقوم بتحميل بقية الوحدات (والخدمات ، وكتل التشغيل ، وما إلى ذلك) بعد أن يكون لدى $ q تم إنشاؤه.
lgalfaso - ربما يمكنك النظر في هذا قليلاً كجزء من عملك $injector
لاحقًا هذا الأسبوع (أو التالي)؟
أعلم أنه مجرد حل بديل ، لكنني عادةً ما قمت بحل مشكلة وجود بعض منطق التمهيد غير المتزامن باستخدام موجه ui الزاوي والحصول على حالة جذر مجردة مع الحل. يجب دائمًا حل حالة الجذر المجردة أولاً ، لذا فهي مكان جيد لتحميل الإعدادات ، وعرض الرسوم المتحركة للتحميل ، وما إلى ذلك.
هذا سيكون حقا رائعا.
: +1:
في انتظار هذا الإصلاح. آمل أن تحصل على 1.4
+1
حصلت على حالة استخدام أخرى: أحتاج إلى بدء نقاط النهاية المحاكية الخاصة بي باستدعاء $ http عند بدء التشغيل (لتخزين بعض البيانات مؤقتًا) ...
+1
+1
فقط تعثرت في هذا أيضًا ...
petebacondarwin أعتقد أنه سيكون من الجيد الاستمرار في تحميل جميع الوحدات الأخرى ، ولكن تأجيل بدء التنقل الأولي.
بدلاً من ذلك ، يمكن أن يقدم $ routeProvider معلمة دالة قابلة للتكوين والتي يجب أن تؤجل عرض المسار الأولي.
+1
+1
إليك حل بديل: http://plnkr.co/edit/vi7mDjmD4NpZAoP7MVzr؟p=preview
الفكرة هي أن Angular يمنحك في الواقع القدرة على إنشاء حاقن خاص بك من مجموعة من الوحدات. في هذه الحالة ، قمت بتأخير تجميع $rootElement
حتى يتم حل مجموعة من الوعود ( resolves
). هذا هو POC وسيكون هناك عدد من الأجراس والصفارات الأخرى التي ستكون ضرورية لجعل هذا الإنتاج جاهزًا. بصرف النظر عن أي شيء آخر ، قد تحتاج إلى اكتشاف الأخطاء في الحلول بدلاً من مجرد ابتلاعها.
+1
هذا في الغالب دليل لمن يريد أن يجربها ؛ تقوم عملية التمهيد حاليًا بما يلي:
$rootElement
$rootElement
في الأعلى ، عند إنشاء الحاقن ، الخطوات هي التالية:
run
لوقت لاحقrun
هناك بعض النقاط الرئيسية:
run
قبل تجميع $rootElement
$rootElement
$q
يحل الوعود أثناء دورة الملخص _ فقط_هذا هو:
run
ترجع وعدًا ويحتاج الوعد إلى حل قبل بدء التطبيق ، فستكون هناك دورات ملخّصة قبل التجميع الأولي (قد يؤدي ذلك إلى كسر التطبيقات الحالية)config
مع الموفرين ، وليس مع المثيلاتمهما كان الحل ، يحتاج للتعامل مع هذه الحالات
+1
أى اخبار؟
أريد فقط تحميل بعض إعدادات التكوين قبل أن يبدأ التطبيق بالفعل.
+1
أود تحميل بعض البيانات غير المتزامنة بعد التمهيد عندما تكون جميع المصانع الخاصة بي جاهزة وقبل التجميع.
dagingaa : أعتقد أنني سأختار الحل الخاص بك كحل بديل! شكرا
تحديث إلى dagingaa : حلقة for تجميد
https://jsfiddle.net/tuxmachine/t4d63vnw/
هذه هي الطريقة التي قمت بها بحلها من أجل تنفيذ رمز OAuth المميز ، والذي تطلب حل استدعاء ajax الأولي قبل تهيئة بقية التطبيق.
لن تعمل إذا كان لديك العديد من الكتل غير المتزامنة
+1
+1
+1
لقد مضى عامان منذ فتح القضية ولا يوجد حتى الآن حل جيد
vladmiller هناك حلول ولكن ربما لا تشعر أنها جيدة:
$onActivate
في مكون المستوى الأعلىيؤدي وضع عمل تطبيق غير تافه داخل كتل .run
إلى صعوبة اختبار الوحدة للكود. لذا فهو ليس شيئًا نريد تشجيعه. نقل هذا إلى Ice Box كشيء من غير المحتمل أن ننفذها.
petebacondarwin أنا أختلف معك ؛ يتوقع الجميع أن يكون Angluar بسيطًا وبديهيًا ، وبدلاً من ذلك يتعين عليك إما تنفيذ وحدة التمهيد غير المتزامن الخاصة بك أو وحدة التمهيد في مكان مختلف. في رأيي ، هذا يجعل الزاوي أكثر تعقيدًا.
هل يمكنك أيضًا شرح ما تقصده عندما تقول أن الكود غير المتزامن في .run
سيجعل الاختبار أكثر صعوبة؟
أعتذر عن تعليقي الوقح السابق.
شكرا
petebacondarwin أنا لا أرى كيف أنه يجعل من الصعب الاختبار. إذا قمت بوضع كود التهيئة في خدمة ما ، يمكنك فقط مشاهدة / محاكاة / مقارنة النتائج التي تتوقعها من محاكاة http الخلفية ، بغض النظر عما إذا كان يتم تنفيذها داخل كتلة .run
أم لا. وجود رمز خارج الزاوية بسبب الحلول البديلة لعدم وجود تشغيل غير متزامن هو ما يجعل اختباره شبه مستحيل
كيف الحال؟
حل petebacondarwin يعمل بالنسبة لي
نظرًا لوجود حلول بديلة ودعم كتل التشغيل غير المتزامن ستضيف تعقيدًا إلى التمهيد ، لا أعتقد أننا سنقوم بتنفيذ هذه الميزة.
ميزة بسيطة ولكن يصعب تنفيذها. 😕
+1 لهذه الميزة
+1
+1
حل petebacondarwin يعمل بشكل جيد.
+1. :(
+1
+1
+1
+1
لن نقوم بهذا.
+100 ، كل العمل حولك سيء.
@ Eduardo-Julio - لن ننفذ هذه الميزة لأنها ستجعل التمهيد لتطبيقات AngularJS أكثر تعقيدًا. لن تساعد إضافة المزيد من +
s.
التعليق الأكثر فائدة
ميزة بسيطة ولكن يصعب تنفيذها. 😕