javascript - Angular 1.5 组件 : passing a function

标签 javascript angularjs components

是否可以将函数传递给组件并在传递参数的组件内部调用此函数?

例子:

帖子列表

<post-list posts="blog.posts"
           loading="blog.loadingPosts"
           get-post-url="blog.getPostUrl" 
           is-user-authenticate="blog.user">
</post-list>

getPostUrl 是一个函数(在容器 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;
};

帖子列表:组件

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 Error: [$interpolate:interr] Can't interpolate: {{$ctrl.getPostUrl(post.creationDate)}} TypeError: Cannot use 'in' operator to search for 'blog' in 1459329888892 Error Link

有可能吗?又如何?

非常感谢!

最佳答案

您可以将函数传递给组件,但您必须将函数参数定义为对象,并将正确的参数名称作为其键。 示例:

<post-list posts="blog.posts"
           loading="blog.loadingPosts"
           get-post-url="blog.getPostUrl(postId)" 
           is-user-authenticate="blog.user">
</post-list>

const PostList = {
 "bindings": {
  "posts": "<",
  "loading": "<",
  "getPostUrl": "&", //Function getPostUrl
  "isUserAuthenticate": "<"
 },
 "template": `<post creation-date="{{post.creationDate}}"
                      content="{{post.content}}"
                      post-url="{{$ctrl.getPostUrl({postId:post.creationDate})}}">
                </post>

关于javascript - Angular 1.5 组件 : passing a function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36884303/

相关文章:

javascript - 如何从 Xpath 中隔离可在 document.querySelector 中使用的选择器?

javascript - 如何将 UTC 时间转换为本地时间

javascript - PHP 文件从未从 jQuery 调用

javascript - 带有 $http 请求的 Angular js 中的加载时间百分比

javascript - Angular UI-Router 在一种状态下有更多可选参数

user-interface - Java Swing - 半透明组件

javascript - 索引 firebase 对象

javascript - 然后似乎在异步返回值之前触发

dynamic - Angular 2 - 使用 ComponentResolver 加载运行时下载的组件

flash - 是否有像 Flash 那样的预先编写的类似 Silverlight Web 小部件的组件?