【问题标题】:AngularJS - Get current object from ng-repeatAngularJS - 从 ng-repeat 获取当前对象
【发布时间】:2018-12-08 02:32:47
【问题描述】:

我正在为我们的应用程序开发用户个人资料“卡片”类型的东西。这个想法是利用 AngularJS 材质库为非管理员用户创建一个简单的界面来管理分配给他们的其他用户。

我运行 ng-repeat 来提取这些卡片的数据,然后为它们生成标记,如下所示:

<!-- language: lang-js -->
<div class="col-md-6 md-padding float-left" ng-repeat="user in allUsers">
    <md-toolbar class="row col-md-12 md-hue-5 md-dense px-0">
        <div class="md-toolbar-tools">
            <span class="col-md-10">{{ user.name }}</span>
            <md-button id="managedUserDetails" type="submit" ng-click="null" class="md-fab" aria-label="Click to view profile">
                <md-icon md-svg-src="/images/svg/action/ic_open_in_new_48px.svg"></md-icon> 
            </md-button>
        </div>
    </md-toolbar>

    <div class="row col-md-12 border border-dark">
        <div class="row col-md-12">
            <md-input-container class="md-block col-md-6" flex-gt-xs>
                    <label>Name:</label>
                    <input ng-model="user.name" class="detailDisabled" disabled>
            </md-input-container>

//code continues for other bits, and yes, the tags are closed :)

我的问题是关于 md-button 元素。在其中,我想使用一个函数来显示该用户的扩展视图,但要做到这一点,我需要按钮所在的特定用户卡中的数据。然后我可以使用该数据来填充扩展视图.

那么问题来了:

有没有办法告诉 Angular “给我你用来生成父元素的数据?”

如果没有,我将不得不做一些思考,因为我现在能想到的只是......非优雅的解决方案:)

【问题讨论】:

  • 当您说“打开扩展视图”时,您到底是什么意思?您尝试访问的数据是否只是来自ng-repeat 的用户数据?您可能只需将ng-click="null" 替换为一个函数,该函数接受任何属性是用户或整个用户对象的唯一标识符。如果您不打算使用ng-click,则应将其从按钮中删除。
  • 是的,这就是我打算做的,我的困惑是因为我不明白我可以调用用户对象并获取我需要的信息。很高兴它很简单

标签: javascript angularjs angularjs-ng-repeat angular-ngmodel angularjs-material


【解决方案1】:

你可以使用ng-init = "someFunction(user)"

<div class="col-md-6 md-padding float-left" ng-repeat="user in allUsers"
     ng-init = "someFunction(user)">

【讨论】:

  • 每次运行 ng-repeat 时会触发 someFunction(user) 吗? ng-init 上的文档似乎缺乏(在我一天结束的 5 分钟谷歌搜索中)
  • 是的,ng-init 很好。它将为每个 ng-repeat 项目调用并调用控制器函数。
【解决方案2】:

您可以将用户对象直接传递给ng-click,使用ng-init会在元素生成时一直调用该方法,

<md-button id="managedUserDetails" ng-click="getAdvancedView(user)" class="md-fab" aria-label="Click to view profile">
   <md-icon md-svg-src="/images/svg/action/ic_open_in_new_48px.svg"></md-icon> 
</md-button>

在您的控制器上,您可以在按钮点击事件中访问整个用户对象,

$scope.getAdvancedView = function(user) {
   console.log(user.name);
}

【讨论】:

  • 工作就像一个魅力,当然会这么简单:) 谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多