Подтвердить что ты не робот

AngularJS: Передача функции в изолированную область действия директивы, которая должна быть вызвана внутри контроллера?

Я пытаюсь вызвать функцию, переданную из области контроллера, в директиву через "&" с контроллера. Тем не менее, этот способ заявляется Angular как undefined. После прочтения моего кода снова и снова, очистка интернета, а затем повторение этого процесса, я решил обратиться сюда, чтобы помочь здесь.

Вот соответствующая часть моего контроллера. Он содержит метод, который я передаю своей директиве.

angular.module('myApp.controllers', []).controller('PostCtrl', ['$scope', 'postalService', function($scope, postalService) {
    $scope.posts = [];

    $scope.getPosts = function() {
        postalService.getPosts(function(err, posts) {
            if(err);
            else $scope.posts = posts;
        });
    };
}]);

Вот моя директива. Я не могу ссылаться onPost.

angular.module('myApp.directives', []).directive('compose', ['postalService', function(postalService) {
    return {
        restrict: 'E',
        transclude: false,
        replace: true,
        scope: {
            onPost: "&" //why will it not
        },
        templateUrl: "partials/components/compose-partial.html",
        controller: function($scope, postalService) {
            $scope.title = "";
            $scope.content = "";
            $scope.newPost = function() {
                postalService.newPost($scope.title, $scope.content, function(err) {
                    if(err) console.log(err + ":(");
                    else {
                        console.log("Success getting posts.");
                        //why can I not invoke onPost()??
                        $scope.onPost();
                    }
                });
            };
        },
    };
}]);

И вот соответствующая часть моего html

<div ng-controller="PostCtrl">
    <section class="side-bar panel hide-for-small">
        <compose onPost="getPosts()"></compose>
    </section>

    <!--more, non-relevant html here-->

</div>

Я знаю, что проблема не в моем почтовом сервисе. Вместо этого в директиве сообщается, что ей не передается никакая функция. Почему??

4b9b3361

Ответ 1

Заменить

<compose onPost="getPosts()"></compose>

с

<compose on-post="getPosts()"></compose>

и это сработает.

Angular docs говорят, почему это так:

В директивах есть имена с верблюдом, такие как ngBind. Директива может быть вызывается путем перевода имени случая верблюда в случай змеи с этими специальные символы:, -, или _.