كيفية الوصول إلى وظيفة من التوجيه المحدد في وحدة التحكم المضمنة
-
21-12-2019 - |
سؤال
إذا كان لدي directive
, ، وهذا له خاصته controller
محددة في جسدها:
directives.directive("formWrapper", ['User','$location', function(User, $location) {
return {
...
template: '<div>' +
'<input ng-click="cancel()" type="button" value="Cancel"/>' +
'<input ng-click="save()" type="button" value="Save" />' +
'</div>',
controller: function($scope, $location, User) {
$scope.fields = User.get( {username: "username"} );
var save = function() {...}
var cancel = function() {...}
}
}
}]);
في template
قسم أحاول الوصول إلى وظائف save()
و cancel()
والتي تم تعريفها في وحدة التحكم.
في الوقت الحالي لا يعمل النقر على تلك الأزرار ولا يحدث شيء.
أنا حقا لا أريد أن تحدد
save()
وcancel()
في ال$scope
، لأن هذا التوجيه فقط من المفترض أن يستخدمها.أو ربما لا بأس في جعلهم في$scope
؟لست متأكدا من تلك العزلة.
س: كيف يمكنني تحقيق ذلك؟بعض الحلول/الرؤية المشتركة حول ذلك؟
المحلول
تحتاج إلى وضع save()
و cancel()
على نطاق التوجيه حتى يتمكن القالب من رؤيتها (في الوقت الحالي تكون مرئية فقط داخل وظيفة وحدة التحكم).
لذا بدلاً من:
var save = function() {...}
var cancel = function() {...}
انت تريد
$scope.save = function() {...}
$scope.cancel = function() {...}
من الجيد أن تكون هذه ضمن نطاق التوجيه.انها ليست مثل وضعها $rootScope
وهو عالمي.
ستلاحظ أنني أضفت هذا إلى توجيهك:
scope: {},
وهذا يجعل هذا $scope
يقتصر على هذا التوجيه فقط (AKA "النطاق المعزول").لذلك يمكنك التفكير في هذا ككائن أو نطاق وظيفة - فأنت لا تلوث مساحة الاسم العالمية.
هنا عرض توضيحي: http://jsfiddle.net/uLfLM/1/