【问题标题】:Trying to implement $http in AngularJS尝试在 AngularJS 中实现 $http
【发布时间】:2017-05-07 08:21:22
【问题描述】:

我正在尝试通过从 json 格式的 api 获取数据来在 AngularJS 中实现简单的 http 服务。它是一篇博客文章,我正试图在我的博客中展示它。数据在我的控制台中收到,但未显示在我的博客中。请帮忙。它在前端使用 Bootstrap。这是一个屏幕截图。 http://imgur.com/a/8p24h

var a = angular.module('Blog', []);
a.controller('BlogControl', function($http) {
  var b = this;
  this.heading = 'My Angular Blog';
  this.subheading = 'Made by Anurag';
  this.baseurl = 'https://projectsapi.edwisor.com/api/blogs/';
  $http({
      method: "GET",
      url: this.baseurl + "all"
    })
    .then(function Success(response) {
      console.log(response);
      this.bpost = response.data.data;
    });

})
<!DOCTYPE html>
<html ng-app="Blog">

<head>

  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <meta name="description" content="">
  <meta name="author" content="">

  <title>My Angular Blog</title>

  <!-- Bootstrap Core CSS -->
  <link href="vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">

  <!-- Theme CSS -->
  <link href="css/clean-blog.min.css" rel="stylesheet">

  <!-- Custom Fonts -->
  <link href="vendor/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css">
  <link href='https://fonts.googleapis.com/css?family=Lora:400,700,400italic,700italic' rel='stylesheet' type='text/css'>
  <link href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>

  <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
  <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
  <!--[if lt IE 9]>
        <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
        <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
        <![endif]-->


</head>

<body ng-controller="BlogControl as newBlog">

  <!-- Navigation -->
  <nav class="navbar navbar-default navbar-custom navbar-fixed-top">
    <div class="container-fluid">
      <!-- Brand and toggle get grouped for better mobile display -->
      <div class="navbar-header page-scroll">
        <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
                        <span class="sr-only">Toggle navigation</span>
                        Menu <i class="fa fa-bars"></i>
                    </button>
        <a class="navbar-brand" href="index.html">Start Bootstrap</a>
      </div>

      <!-- Collect the nav links, forms, and other content for toggling -->
      <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
        <ul class="nav navbar-nav navbar-right">
          <li>
            <a href="index.html">Home</a>
          </li>
          <li>
            <a href="about.html">About</a>
          </li>

        </ul>
      </div>
      <!-- /.navbar-collapse -->
    </div>
    <!-- /.container -->
  </nav>

  <!-- Page Header -->
  <!-- Set your background image for this header on the line below. -->
  <header class="intro-header" style="background-image: url('img/home-bg.jpg')">
    <div class="container">
      <div class="row">
        <div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
          <div class="site-heading">
            <h1>{{newBlog.heading}}</h1>
            <hr class="small">
            <span class="subheading">{{newBlog.subheading}}</span>
          </div>
        </div>
      </div>
    </div>
  </header>

  <!-- Main Content -->
  <div class="container">
    <div class="row">
      <div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
        <div class="post-preview" ng-repeat="bl in newBlog.bpost">
          {{bl.bodyHtml}}

        </div>
        <hr>
        <!-- Pager -->
        <ul class="pager">
          <li class="next">
            <a href="#">Older Posts &rarr;</a>
          </li>
        </ul>
      </div>
    </div>
  </div>

  <hr>



  <!-- jQuery -->
  <script src="vendor/jquery/jquery.min.js"></script>

  <!-- Bootstrap Core JavaScript -->
  <script src="vendor/bootstrap/js/bootstrap.min.js"></script>

  <!-- Contact Form JavaScript -->
  <script src="js/jqBootstrapValidation.js"></script>
  <script src="js/contact_me.js"></script>

  <!-- Theme JavaScript -->
  <script src="js/clean-blog.min.js"></script>

  <!-- Important JavaScripts -->
  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.min.js"></script>


  <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.8/angular-route.min.js"></script>
  <script src="angular/app.js" type="text/javascript"></script>

</body>

</html>

【问题讨论】:

    标签: javascript angularjs twitter-bootstrap


    【解决方案1】:

    this 不是回调中的控制器实例。尝试在外面捕获它,然后在捕获的实例上分配bpost

    var that = this;
    $http({
        method: "GET",
        url: this.baseurl + "all"
    })
    .then(function Success(response) {
        console.log(response);
        that.bpost = response.data.data;
    });
    

    【讨论】:

    • 谢谢。为什么会发生这种情况?这似乎在所有其他情况下都有效,但在这里不行?
    • AJAX 回调是异步的,它的上下文与包含的类不同。
    【解决方案2】:

    试试这个 npm 模块anngularjs-requester--http

    【讨论】:

    • 我不确定您为什么要使用它,它与方法中包含的完全相同的功能。此外,它还引入了一个全局 url 变量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-19
    • 1970-01-01
    • 2011-01-14
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 2013-10-25
    相关资源
    最近更新 更多