65

Dies ist der Controller der Hauptvorlage:AngularJS Richtlinie Elemente-Methode Bindung - Typeerror: Kann nicht 'in' Operator für 'functionName-' sucht in 1

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

Dies ist die Richtlinie:

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

Dies ist, wie die Richtlinie in Haupt Vorlage angewendet wird:

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

und das ist Methode fr aufgerufen om Richtlinie Vorlage (Website-overview.html):

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

FRAGE: Wenn EDIT angeklickt wird, erscheint dieser Fehler in der Konsole:

TypeError: Cannot use 'in' operator to search for 'editWebsite' in 1

Weiß jemand, was hier vor sich geht?

Antwort

137

Da Sie eine Ausdrucksbindung definiert haben (&), müssen Sie sie explizit mit einem JSON aufrufen, der id enthält, wenn Sie sie im HTML-Format als edit-website="editWebsite(id)" binden möchten.

Tatsächlich Angular Notwendigkeit zu verstehen, was diese id ist in Ihrem HTML, und da es nicht Teil des Umfangs ist, müssen Sie hinzufügen, was „Einheimischen“ auf Ihren Anruf, indem Sie genannt werden:

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

Oder als Alternative:

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

Mit dem Controller/Link-Code:

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

Das hier dokumentiert ist, sucht das Beispiel "close({message: 'closing for now'})"

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

+7

Vielen Dank für Ihre Antwort und für den Hinweis auf die genaue Position auf der Dokumentation beteiligt, war es unglaublich hilfreich! –

+0

@floribon Ich weiß, das ist irgendwie alt, aber haben Sie ein Beispiel für Typescripting des Rückrufs? – tcrite

+0

Es ist wirklich nützlich, Danke. –

Verwandte Themen