从解析得到的数据中显示页面上的数据

Displaying data on the page from the data gotten from parse

我在解析服务器上有报价 table 和用户 table。我查询了他提供的 table 并且效果很好(控制台日志和 html - 我遇到了异步问题并且 Q.promise 有所帮助)。现在,我正在尝试添加用户 table 中的两个元素。我在控制台上得到它,但在页面上没有。这是我在 offers.service 上的内容:

    this.getAllOffers = function () {

    var Q = $q.defer();
    console.log('getAllOffers called');

    //all offers filter is selected
    this.allOffersFilter = false;

    var offers = Parse.Object.extend("Offer");
    var exchanges = Parse.Object.extend("Exchanges");
    var users = Parse.Object.extend("User");

    var query = new Parse.Query(offers);
    var userQuery = new Parse.Query(users);

    var results = [];

    query.descending("createdAt");
    query.limit(4);

    userQuery.find().then(function(users) {
        for (i = 0; i < users.length; i++) {
            foundUsers = users[i];

            query.find().then( function(offers){
            for(i = 0; i < offers.length; i++){
                found = offers[i];
            var result = {};

            result.date = found.get("createdAt");
            result.price = found.get("price");
            result.status = found.get("accepted");
            result.lastName = foundUsers.get("lastName");
            result.companyName = foundUsers.get("companyName");

            console.log(result.companyName);
            console.log(result.price);
        }
    });
    results.push(result);
  }
  Q.resolve(results);
    });
  return Q.promise;
  };

然后我的HTML:

    <!--List of offers-->
    <div class="col-md-3">
        <h4>List of offers</h4>

        <div ng-if="offersList">
            <div ng-repeat="offer in offersList">
                <div class="offer card">
                    <div>{{offer.username}}</div>
                    <div>{{offer.companyName}}</div>
                    <div>{{offer.date}}</div>
                    <div>{{offer.price}}</div>
                    <div>{{offer.status}}</div>
                </div>
            </div>
        </div>
        <div ng-if="!(offersList)">There are no offers</div>
    </div>

然后我的组件:

angular.module('offersPage')
.component('offersPage', {
    templateUrl: 'pages/offers-page/offers-page.template.html',
    controller: function(AuthService, PageService, OffersService, 
$scope) {
        // Functions for offers-page

        // Check if user is logged in and verified on page load
        AuthService.userLoggedin(function(loggedIn, verified) {
            if(!verified) {
                PageService.redirect('login');
            }
        });

        this.$onInit =  function() {
            OffersService.getAllOffers().then(function(offersList) {

            $scope.offersList = offersList;
            });
      }
    }
});

提前致谢!

当您在 angularjs 中执行 ng-if 时,它会从字面上取出元素,而当它放入元素时,它是作为子作用域。要解决此问题,您需要确保将 $parent 放在 ng-if 内的任何子元素上。见下文。确保在重复其良好做法时使用 track by $index。另请注意,您不需要 $parent 重复任何内容,因为它引用的是已定义的 offer

代码:

<div ng-if="offersList">
            <div ng-repeat="offer in $parent.offersList track by $index">
                <div class="offer card">
                    <div>{{offer.username}}</div>
                    <div>{{offer.companyName}}</div>
                    <div>{{offer.date}}</div>
                    <div>{{offer.price}}</div>
                    <div>{{offer.status}}</div>
                </div>
            </div>
        </div>

您在填充 results 之前解析 $q,因此,您的列表是空的。

我不知道 Parse server,但如果 userQuery.find().thenasync,则需要将 Q.resolve(results); 移到其中,或者可能移到 [=16= 中].