تمرير الأساليب الديناميكية إلى التوجيه المخصص في الزاوي
-
21-12-2019 - |
سؤال
أقوم بإنشاء توجيه مخصص حيث أحتاج إلى تعيين وظيفة داخل الكائن والتي سيتم استخدامها أثناء المرور إلى توجيهي.ومع ذلك ، إذا قمت بتمرير الطريقة عن طريق كتابة اسم الوظيفة مباشرة داخل القالب ، فستعمل بشكل جيد.ولكن إذا قمت بتعيين مرجع هذه الطريقة إلى إحدى خصائص الكائن الخاصة بي ثم أستخدم ذلك في القالب الخاص بي لتمريره إلى التوجيه ولكن هذا لا يعمل.
يمكنك أن ترى هنا - جسفيدل
يمكنك أن ترى في وحدة التحكم.انقر على زر حفظ ، فإنه سيتم استدعاء حفظ وظيفة داخل التوجيه ولكن من هناك أنا استدعاء طريقة تحكم التي لا تعمل.ولكن إذا كتبت اسم الوظيفة blabla
بدلا من ذلك dynamicMethods.myMethod
ثم سيتصل ولكن في ذلك حصلت على تنبيه داخلي غير محدد.
يعطيكم الصّحة.
المحلول
كان لديك ما يقرب من الحق.
كان الخطأ الأول عندما حددت dynamicMethods
الكائن الذي تشير إليه $scope.blabla
التي لم تكن موجودة بعد.
كان الخطأ الثاني عندما تقوم بتمرير القيم إلى accept
استدعاء وظيفة التي كنت قد ملزمة لنطاق الأم ، تحتاج إلى تمريرها كما:
$scope.accept({msg: "from dir"})
أين msg
هو متغير محلي مسمى يمكن استخدامه في قيمة التعبير لـ accept
السمة على مكالمة التوجيه المخصصة الخاصة بك <editkeyvalue accept="dynamicMethods.myMethod(msg)" ...
لقد قمت بتحديث كمان الخاص بك وفقا لذلك.
عندما تكتب accept: "&"
كنت تقول الزاوي ل
- استخدام
$parse
خدمة تحليل التعبير (dynamicMethods.myMethod(msg)
) - "ربط "(من خلال إغلاق جافا سكريبت)
$scope
من الوظيفة التي تم إرجاعها من الخطوة 1 إلى النطاق الأصلي (نطاق وحدة التحكم في حالتك) - قم بتخزين الوظيفة بالداخل
accept
خاصية النطاق المحلي التوجيه الخاص بك.
الآن إذا قمت بفحص المحتوى من $scope.accept
فقط قبل أن نسميها في التوجيه عليك شيئا من هذا القبيل ل:
function (locals) {
return parentGet(parentScope, locals);
}
أين locals
هو كائن مع المتغيرات المحلية المستخدمة عندما نصل تقييم وظيفة عاد من $parse
.نظرا لعدم وجود معلمات مسماة في جافا سكريبت ولا نريد أن نشير بطريقة ما إلى أن المتغير المحلي للقيمة msg
هو "من دير" نحن نمرره ككائن بسيط حيث يشير المفتاح إلى اسم المتغير {msg: "from dir"}
.
الزاوي سوف ننظر في التعبير (سلسلة) لتقييم وتجد أن msg
هو داخل الأقواس وبالتالي يبدو وكأنه معلمة ، والتي يمكن العثور على القيمة في locals
كائن.
عندما يحين الوقت لاستدعاء وظيفة الفعلية الزاوي سيتم تحويل locals
الكائن إلى ترتيب الحفاظ على صفيف منتظم من المعلمات التي تقرأ من التعبير واستدعاء وظيفة بطريقة مشابهة ل:
var locals = {msg: "from dir"};
var targetFn = dynamicMethods.myMethod;
var context = dynamicMethods;
targetFn.apply(context, ["from dir"]);
نأمل أن يساعد قليلا في فهم ما يجري.