كيفية الوصول إلى وظيفة من التوجيه المحدد في وحدة التحكم المضمنة

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

سؤال

إذا كان لدي 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/

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