Ist es möglich, eine Funktion an eine Komponente zu übergeben und diese Funktion in der Komponente aufzurufen, die einen Parameter übergibt?Angular 1.5 Component: Übergeben einer Funktion
Beispiel:
Liste der Beiträge
<post-list posts="blog.posts"
loading="blog.loadingPosts"
get-post-url="blog.getPostUrl"
is-user-authenticate="blog.user">
</post-list>
getPostUrl ist eine Funktion (innerhalb des Behälters Controller):
const getPostUrl = (postId) => {
const protocol = $location.protocol();
const host = $location.host();
const port = $location.port();
return protocol + "://" + host + "" + (port !== 80 ? ":" + port : "") + "/blog/post/" + postId;
};
Liste der Beiträge: Komponente
const PostList = {
"bindings": {
"posts": "<",
"loading": "<",
"getPostUrl": "&", //Function getPostUrl
"isUserAuthenticate": "<"
},
"template": `<div>
<div class="col-md-9 text-center" data-ng-if="$ctrl.loading">
<i class="fa fa-spinner fa-spin fa-2x"></i>
</div>
<div class="col-md-9 posts" data-ng-if="!$ctrl.loading">
<div data-ng-repeat="post in $ctrl.posts">
<post creation-date="{{post.creationDate}}"
content="{{post.content}}"
post-url="{{$ctrl.getPostUrl(post.creationDate)}}"
is-user-authenticate="$ctrl.user">
</post>
</div>
</div>
</div>`,
"transclude": false
};
angular
.module("blog")
.component("postList", PostList);
In dieser Zeile:
post-url="{{$ctrl.getPostUrl(post.creationDate)}}"
Ich möchte die Funktion aufzurufen, einen Parameter übergeben und diese Funktion eine Zeichenfolge zurückkehrt.
In Pfostenkomponente (nicht PostList) die PostURL ein Zeichenfolgenattribut @
ist.
Aber ... funktioniert nicht!
angular.js:13550 Error: [$interpolate:interr] Can't interpolate: {{$ctrl.getPostUrl(post.creationDate)}} TypeError: Cannot use 'in' operator to search for 'blog' in 1459329888892 Error Link
Ist es möglich, es zu tun? Und wie?
Vielen Dank!
Sie brauchen nicht die '{{}}' für eine '&' Bindung - siehe in diesem Abschnitt der Dokumentation für ein gutes Beispiel dafür, wie zu erreichen, was Sie suchen zu tun: https://docs.angularjs.org/guide/component#component-based-application-architecture –
Aber die Rückkehr dieser Funktion ist ein String ... 'post-url' ist ein String. Ich möchte die Funktion aufrufen, die diese Zeichenfolge zurückgibt –
Ich habe jetzt geändert ... Aber jetzt erscheint dieser Fehler: 'Kann 'in' Operator nicht verwenden, um nach 'Blog' zu suchen' –