it-swarm.asia

لماذا لا تستخدم مستندات AngularJS نقطة في توجيه النموذج؟

في الفيديو AngularJS MTV Meetup: Best Practices (2012/12/11) ، يوضح Miško ".. إذا كنت تستخدم نموذج ng ، فيجب أن يكون هناك نقطة في مكان ما ، إذا لم يكن لديك نقطة ، فأنت تفعل ذلك بشكل خاطئ .. "

ومع ذلك ، يبدو أن المثال الأول (الأساسيات) في موقع Angular.JS يتعارض مع ذلك. ما يعطي؟ هل تغيرت Angular.JS منذ اجتماع MTV الذي أصبح الآن أكثر تسامحًا مع طراز ng؟

67
silvernightstar

هذه النقطة الصغيرة مهمة جدًا عند التعامل مع تعقيدات وراثة النطاق.

يحتوي egghead.io video "The Dot" على نظرة عامة جيدة حقًا ، وكذلك الحال في سؤال تجاوز سعة المكدس الشائع جدًا: ما هي الفروق الدقيقة للنموذج الأولي للنطاق/الميراث النموذجي في AngularJS؟

سأحاول تلخيصها هنا:

يستخدم Angular.js النطاق الوراثي للسماح لنطاق تابع (مثل وحدة تحكم تابعة) بمشاهدة خصائص النطاق الأصل. لذلك ، دعنا نقول أن لديك إعداد مثل:

<div ng-controller="ParentCtrl">
    <input type="text" ng-model="foo"/>
    <div ng-controller="ChildCtrl">
        <input type="text" ng-model="foo"/>
    </div>
</div>

( العب على طول JSFiddle )

في البداية ، إذا قمت بتشغيل التطبيق ، وكتبت في إدخال الأصل ، فسيتم تحديث الطفل ليعكسه.

ومع ذلك ، إذا قمت بتحرير النطاق الفرعي ، فسيتم الآن قطع الاتصال بالوالد ، ولم يعد الاثنان متزامنين. من ناحية أخرى ، إذا استخدمت ng-model="baz.bar" ، فسيظل الرابط.

سبب حدوث ذلك هو أن نطاق الطفل يستخدم ميراثًا أوليًا للبحث عن القيمة ، طالما أنه لم يتم تعيينه على الطفل ، فسيتم تأجيله إلى نطاق الأصل. ولكن بمجرد تعيينها ، لم تعد تبحث عن الوالد.

عند استخدام كائن (baz) بدلاً من ذلك ، لن يتم تعيين أي شيء على نطاق تابع ، ويبقى الميراث.

لمزيد من التفاصيل التفصيلية ، راجع إجابة StackOverflow

106
OverZealous

ستكون هناك حاجة إلى نقطة عندما ترث نطاقًا واحدًا من نطاق آخر بشكل أولي ، على سبيل المثال في حالة تكرار ng ، يتم إنشاء نطاق جديد لكل عنصر سطر يرثه النموذج من النطاق الأصلي. في المثال الأساسي ، لا يوجد ميراث نموذج أولي نظرًا لوجود نطاق واحد فقط ولكن إذا كان لديك عدد من النطاقات الفرعية ، فستبدأ في مواجهة المشكلة. الرابط أدناه سيوضح كل شيء.

https://github.com/angular/angular.js/wiki/Understanding-Scopes#ng-repeat

17
Ajay Beniwal

لذلك لحل هذه المشكلة ، تأكد في JS من إعلان الوالد أولاً:

مثلا.

$scope.parent

تليها:

$scope.parent.child = "Imma child";

القيام فقط الطفل دون الوالد سوف كسر الزاوي.

0
Shaheen K