تمرير الأساليب الديناميكية إلى التوجيه المخصص في الزاوي

StackOverflow https://stackoverflow.com//questions/25056275

  •  21-12-2019
  •  | 
  •  

سؤال

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

يمكنك أن ترى هنا - جسفيدل

يمكنك أن ترى في وحدة التحكم.انقر على زر حفظ ، فإنه سيتم استدعاء حفظ وظيفة داخل التوجيه ولكن من هناك أنا استدعاء طريقة تحكم التي لا تعمل.ولكن إذا كتبت اسم الوظيفة blabla بدلا من ذلك dynamicMethods.myMethod ثم سيتصل ولكن في ذلك حصلت على تنبيه داخلي غير محدد.

يعطيكم الصّحة.

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

المحلول

كان لديك ما يقرب من الحق.

كان الخطأ الأول عندما حددت dynamicMethods الكائن الذي تشير إليه $scope.blabla التي لم تكن موجودة بعد.

كان الخطأ الثاني عندما تقوم بتمرير القيم إلى accept استدعاء وظيفة التي كنت قد ملزمة لنطاق الأم ، تحتاج إلى تمريرها كما:

$scope.accept({msg: "from dir"})

أين msg هو متغير محلي مسمى يمكن استخدامه في قيمة التعبير لـ accept السمة على مكالمة التوجيه المخصصة الخاصة بك <editkeyvalue accept="dynamicMethods.myMethod(msg)" ...

لقد قمت بتحديث كمان الخاص بك وفقا لذلك.

عندما تكتب accept: "&" كنت تقول الزاوي ل

  1. استخدام $parse خدمة تحليل التعبير (dynamicMethods.myMethod(msg))
  2. "ربط "(من خلال إغلاق جافا سكريبت) $scope من الوظيفة التي تم إرجاعها من الخطوة 1 إلى النطاق الأصلي (نطاق وحدة التحكم في حالتك)
  3. قم بتخزين الوظيفة بالداخل 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"]);

نأمل أن يساعد قليلا في فهم ما يجري.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top