19
我試圖通過指令的控制器中的「&」操作將從控制器範圍傳遞的函數調用爲指令。然而,Angular認爲這種方法是未定義的。在反覆閱讀我的代碼後,瀏覽互聯網,然後重複這個過程,我決定轉向這裏尋求幫助。AngularJS:將一個函數傳遞給在其控制器中調用的指令的隔離範圍?
這裏是我的控制器的相關部分。它包含我傳遞給我的指令的方法。
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>
的相關部分,我知道這個問題是不是與我的postalService服務。相反,該指令報告沒有函數傳遞給它。爲什麼??
啊,當然! Angular有什麼特別的理由嗎(除了讓bug追蹤者撕掉他的頭髮)? – thebradbain
@thebradbain我對此沒有直接的答案,但是來自W3C的大多數標準都傾向於使用連字符使用小寫字母,所以我會說Angular的人只是堅持這一慣例。我自己也不記得遇到任何既不是駝峯案也不是pascal案的HTML標記。 –
HTML本質上不區分大小寫 - onPost屬性等同於onpost屬性。因此,JavaScript camelCase ==> HTML snake案例的慣例是合理的。 – MikeMac