javascript - 比较来自不同 Controller 的 2 个 GET 对象

标签 javascript angularjs angularjs-service angularjs-controller angularjs-http

我有来自 2 个不同 Controller 的 2 个(数组)对象。

对象 1(名称 Controller 1):

[{id:1,"name":"jakov"},...]

对象2(昵称 Controller 2):

[{id:1, "nickname" : "jandric", "nameId" :1, "title" : "master"},...]

我通过服务从 Controller 1 广播对象:

$http.get('names/').success(function(data) {
            sharedService.broadcastItem(data);
});

我在 Controller 2 中处理广播对象:

$scope.$on('handleBroadcast', function() {
            $scope.names= sharedService.message;
});

Controller 2 也有 GET 请求:

$http.get('nicknames/').success(function (data) {
           $scope.nicknames = data;
});

我有一个简单的表格,我想在其中显示:昵称ID、昵称、姓名和头衔。

类似这样的事情:

<div ng-controller="Nickname">
    <table>
        <tr>
            <th>nicknameId</th>
            <th>nickname</th>
            <th>name</th>
            <th>title</th>
        </tr>
        <tr ng-repeat="nick in nicknames">
            <td>{{nick.id}}</td>
            <td>{{nick.nickname}}</td>
            <td ng-controller="Name">{{??????}}</td> //GET name request trigger
            <td>{{nick.title}}</td>
        </tr>
    </table>
</div>

如何从第二个对象中给定 nameId 的第一个对象获取名称?

请帮忙:D

更新

我设法在 html 中做到这一点,如下所示:

    <div ng-controller="Nickname">
        <table>
            <tr>
                <th>nicknameId</th>
                <th>nickname</th>
                <th>name</th>
                <th>title</th>
            </tr>
            <tr ng-repeat="nick in nicknames">
                <td>{{nick.id}}</td>
                <td>{{nick.nickname}}</td>
                <td ng-controller="Name">
                   <div ng-repeat="name in names">
                      <div ng-if="nick.nameId === name.id">
                          {{name.name}}
                      </div>
                   </div>
                </td>
                <td>{{nick.title}}</td>
            </tr>
        </table>
    </div>

所以我在 for 循环中使用 for 循环。有更简单的答案吗?

最佳答案

我希望我的问题是正确的: 在 Nickname Controller $scope 中创建一个索引,通过 id 映射到名称:

/**
 *
 * @param {Array.<obj>} source: The array of objects the index should be created with.
 * @param {string} property: The property that shall be used as key for the new index
 * @return {object} provides access to all objects by the chosen property
 */
var buildIndex = function(source, property) {
    var temp = {};
    for(var i = 0, len = source.length; i < len; ++i) {
        temp[source[i][property]] = source[i];
    }
    return temp;
};

然后就可以访问模板中的索引了:

<div ng-controller="Nickname">
<table>
    <tr>
        <th>nicknameId</th>
        <th>nickname</th>
        <th>name</th>
        <th>title</th>
    </tr>
    <tr ng-repeat="nick in nicknames">
        <td>{{nick.id}}</td>
        <td>{{nick.nickname}}</td>
        <td>{{index[nick.id].name}}</td>
        <td>{{nick.title}}</td>
    </tr>
</table>

关于javascript - 比较来自不同 Controller 的 2 个 GET 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31021629/

相关文章:

javascript - AngularJS $scope 继承服务

javascript - 什么是没有外大括号的 JavaScript 对象?

javascript - 当我只对一个 div 使用 jQuery scrollLeft 时,整个页面在顶部滚动

angularjs - 从 github 克隆后设置 grunt、bower、angular 开发工具

angularjs - 如何在其他地方处理 angular.service 变更?

unit-testing - AngularJS - 具有值依赖注入(inject)的单元测试服务

php - 为什么我的 Ajax 函数会返回我的整个代码?

javascript - 在 Polymer 中动态生成 SVG 样式

javascript - 使用 selenium 和 ngWebDriver 访问动态 ng-repeat

javascript - 在 AngularJS 应用程序中加载 JSON(加载谷歌电子表格)