Angularjs.在 http.get 之后显示对象属性

angularjs. Display object property after http.get

本文关键字:显示 对象 属性 之后 get http Angularjs      更新时间:2023-09-26

我是Angular.js新手,我用codeschool.com Shaping up with angularjs了教程,所以如果我试图解决的问题可能太容易解决,请原谅我。

因此,我只是尝试显示我从$http.get()获得的数据,该数据是JSON对象到我的文档中。

索引.html:

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <title>League of legends</title>
    <!-- Load StyleSheets -->
    <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">
    <!-- Load Javascript Libraries -->
    <script type="text/javascript" src="js/jquery.min.js"></script>
    <script type="text/javascript" src="js/bootstrap.min.js"></script>
    <script type="text/javascript" src="js/angular.min.js"></script>
    <script type="text/javascript" src="js/app.js"></script>
</head>
<body ng-app="LeagueOfLegends">
    <!-- Navbar menu -->
    <nav class="navbar navbar-default">
        <div class="container-fluid">
            <div class="collapse navbar-collapse">
                <ul class="nav navbar-nav">
                    <li>
                        <a href="#">About</a>
                    </li>
                    <li>
                        <a href="#">Contact</a>
                    </li>
                </ul>
            </div>
        </div>
    </nav>
    <div class="container">
        <div ng-controller="searchSummoner as summoner">
            <!-- Search Form -->
            <div ng-show="summoner.status.showSearch">
                <form ng-submit="summoner.search()">
                    <div class="well">
                        <div class="form-group">
                            <label for="summonerName">Summoner Name</label>
                            <input type="text" class="form-control" placeholder="Enter Summoner Name" id="summonerName" ng-model="summoner.form.name">
                        </div>
                        <div class="form-group">
                            <label ng-repeat="region in summoner.region">
                                <input type="radio" ng-model="summoner.form.region" ng-value="region">{{region}}
                            </label>
                        </div>
                        <input type="submit" class="btn btn-default" value="Search"></input>
                    </div>
                </form>
            </div>
            <p ng-show="summoner.status.showResult">Get request from: {{summoner.data.name}}</p>
        </div>
    </div>
</body>

应用程序.js(模块控制器(:

var app = angular.module('LeagueOfLegends', []);
app.controller('searchSummoner', ['$http', function($http)
{
    var form = {};
    this.data = {};
    this.form = {};
    this.status = {
        showSearch: true,
        showResult: false
    };
    this.region = ['br', 'eune', 'euw', 'lan', 'las', 'na', 'oce', 'kr', 'tr'];
    this.search = function()
    {
        form = this.form;
        this.form = {};
        // get data from the api rest
        $http.get(getApiUrl(form)).success(function(data){
            this.data = data[form.name];
            console.log(this.data);
        });
        // hide form
        this.status.showSearch = false;
        this.status.showResult = true;
    };
}]);
function getApiUrl(form)
{
    var apiKey = 'fe9eb24f-5800-4f2a-b570-15328062b341';
    return 'https://lan.api.pvp.net/api/lol/' + form.region + '/v1.4/summoner/by-name/' + form.name + '?api_key=fe9eb24f-5800-4f2a-b570-15328062b341'
}

成功制作$http.get后,我制作了一个日志,只是为了检查我检索的数据是否是我需要的数据,但它没有在 HTML 中显示对象属性

你在错误的闭包中使用了this。这是你应该做的:

var that = this;//give controller scope access
// get data from the api rest
$http.get(getApiUrl(form)).success(function(data){
    that.data = data[form.name];
    console.log(that.data);
});

您也可以像这样绑定上下文:

$http.get(getApiUrl(form)).success(function(data){
    this.data = data[form.name];
    console.log(this.data);
}.bind(this));

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind