Уязвимость привязана к элементу привязки AngularJS - TypeError: не может использовать оператор "in" для поиска "functionName" в 1
Это контроллер основного шаблона:
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>
ВОПРОС: Когда щелкнут EDIT, эта ошибка появляется в консоли:
TypeError: не может использовать оператор 'in' для поиска 'editWebsite' в 1
Кто-нибудь знает, что здесь происходит?
Ответы
Ответ 1
Поскольку вы определили привязку выражения (&
), вам нужно явно вызвать его с помощью JSON, содержащего id
, если вы хотите связать его в 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});
}
Это описано здесь, ищите пример, включающий "close({message: 'closing for now'})"
https://docs.angularjs.org/guide/directive