AngularJS指令元素方法绑定 – TypeError:不能使用'in'操作符来search1中的'functionName'

这是主模板的控制器:

app.controller('OverviewCtrl', ['$scope', '$location', '$routeParams', 'websiteService', 'helperService', function($scope, $location, $routeParams, websiteService, helperService) { ... $scope.editWebsite = function(id) { $location.path('/websites/edit/' + id); }; }]); 

这是指令:

 app.directive('wdaWebsitesOverview', function() { return { restrict: 'E', scope: { heading: '=', websites: '=', editWebsite: '&' }, templateUrl: 'views/websites-overview.html' } }); 

这是指令如何在主模板中应用:

 <wda-websites-overview heading="'All websites'" websites="websites" edit-website="editWebsite(id)"></wda-websites-overview> 

这是从指令模板(website-overview.html)调用的方法:

 <td data-ng-click="editWebsite(website.id)">EDIT</td> 

问题:单击编辑时,控制台中将显示此错误:

TypeError:不能使用'in'运算符来search1中的'editWebsite'

有人知道这里发生了什么?

既然你定义了一个expression式绑定( & ),你需要明确地用一个包含id的JSON来调用它,如果你想在HTML中绑定它, edit-website="editWebsite(id)"

的确,Angular需要了解这个id在你的HTML中是什么,因为它不是你的范围的一部分,所以你需要在你的调用中添加所谓的“locals”

 data-ng-click="editWebsite({id: website.id})" 

或者作为替代:

 data-ng-click="onClick(website.id)" 

使用控制器/链接代码:

 $scope.onClick = function(id) { // Ad "id" to the locals of "editWebsite" $scope.editWebsite({id: id}); } 

这是logging在这里,查找涉及"close({message: 'closing for now'})"的例子"close({message: 'closing for now'})"

https://docs.angularjs.org/guide/directive