【发布时间】:2016-08-21 10:12:33
【问题描述】:
是否可以将函数传递给组件并在传递参数的组件内部调用此函数?
例子:
帖子列表
<post-list posts="blog.posts"
loading="blog.loadingPosts"
get-post-url="blog.getPostUrl"
is-user-authenticate="blog.user">
</post-list>
getPostUrl 是一个函数(在容器控制器内):
const getPostUrl = (postId) => {
const protocol = $location.protocol();
const host = $location.host();
const port = $location.port();
return protocol + "://" + host + "" + (port !== 80 ? ":" + port : "") + "/blog/post/" + postId;
};
帖子列表:组件
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);
在这一行:
post-url="{{$ctrl.getPostUrl(post.creationDate)}}"我想调用传递参数的函数,这个函数返回一个字符串。
在 post 组件(不是 PostList)中,postUrl 是一个字符串属性@。
但是...不起作用!
angular.js:13550 错误:[$interpolate:interr] 无法插值:{{$ctrl.getPostUrl(post.creationDate)}} TypeError:无法使用“in”运算符在 1459329888892 中搜索“博客” Error Link
有可能吗?以及如何?
非常感谢!
【问题讨论】:
-
对于
&绑定,您不需要{{ }}- 请参阅文档的这一部分,了解如何实现您想要做的事情的一个很好的例子:docs.angularjs.org/guide/… -
但是这个函数的返回是一个字符串...
post-url是一个字符串。我想调用返回这个字符串的函数 -
我现在改了...但是现在出现这个错误:
Cannot use 'in' operator to search for 'blog'
标签: javascript angularjs components