directivas javascript angularjs angularjs-directive angularjs-scope

javascript - directivas - AngularJS: ¿Pasar una función a un ámbito aislado de una directiva a ser llamada dentro de su controlador?



ng-init (1)

Reemplazar

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

con

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

y funcionará.

Los documentos angulares dicen por qué es así:

Las directivas tienen nombres en camello como ngBind. La directiva se puede invocar traduciendo el nombre de la caja del camello al caso de la serpiente con estos caracteres especiales:, -, o _.

Estoy tratando de llamar a una función pasada del alcance de un controlador a una directiva a través de la operación "&" desde el controlador de la directiva. Sin embargo, Angular afirma que ese método no está definido. Después de leer mi código una y otra vez, buscar en Internet y luego repetir ese proceso, he decidido recurrir para ayudar aquí.

Aquí está la parte relevante de mi controlador. Contiene el método que paso a mi directiva.

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; }); }; }]);

Aquí está mi directiva. No puedo invocar 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(); } }); }; }, }; }]);

Y aquí está la parte relevante de mi html.

<div ng-controller="PostCtrl"> <section class="side-bar panel hide-for-small"> <compose onPost="getPosts()"></compose> </section> <!--more, non-relevant html here--> </div>

Sé que el problema no es con mi servicio de servicio postal. En cambio, la directiva informa que no se le pasa ninguna función. ¿¿Por qué??