在 html 页面中显示 JSON 答案 AngularJS

Displaying JSON answer in an html page with AngularJS

我没有 JavaScript and/or Angular 的背景,但我需要将它用于研究项目。不久,我需要在网页上显示 JSON 这是来自另一个组件的答案。

流程如下:

从用户界面单击“提交”按钮,一个 JSON 文件被发送到另一个组件,该组件执行某些操作并且 returns 一个 JSON。这个答案 JSON 应该显示在网页上。

提交按钮如下,发生在名为page2.html的页面中:

<button name="topage1" class="button-submit" ng-click="generateJSON()">Submit</font></button>

方法generateJSON()具有以下代码:

$scope.generateJSON = function(){
   generateIdForComponents();
   addRestrictions();
   // REST
   data = angular.toJson($scope.schema, true);
   headers= {
     'Content-Type': 'application/json',
     'Cache-Control':'no-cache',
     'Access-Control-Allow-Origin': '*'
   };

$http.post('http://127.0.0.1:5000/re/z3', data, {headers:headers}).
    then(function(response) {
        console.log("Merge post ", response.data);
        $scope.greeting = response.data;
    });
}});

路由如下:

app.config(function($routeProvider) {
  $routeProvider
  .when("/topage1", {
      templateUrl : "page1.html",
      controller : "page1Controller"
  })
  .when("/topage2", {
      templateUrl : "page2.html",
      controller : "page2Controller"
  })
  .when("/results", {
      templateUrl : "outputOffers.html",
      controller : "resultsController"
  })
  .otherwise({
      templateUrl : "page1.html",
      controller : "page1Controller"
   });
});

我应该写什么代码才能让 JSON 显示在 outputOffers.html 上。

一个选项可以是创建一个服务,该服务将包含两个函数来存储和获取值。存储值的函数将放在'page2Controller'中。 获取值的函数将放在 resultsController 中。 在下面找到一个简短的教程。

服务应如下所示:

app.config(function($routeProvider) {
  $routeProvider
  .when("/topage1", {
      templateUrl : "page1.html",
      controller : "page1Controller"
  })
  .when("/topage2", {
      templateUrl : "page2.html",
      controller : "page2Controller"
  })
  .when("/results", {
      templateUrl : "outputOffers.html",
      controller : "resultsController"
  })
  .otherwise({
      templateUrl : "page1.html",
      controller : "page1Controller"
   });
});

app.service('greetingService', function() {
    this.greeting = '';
    this.store = function (greeting) {
        this.greeting = greeting;
    }
    this.fetch = function () {
      return this.greeting;
    }
});

page2Controller 应如下所示:

app.controller('page2Controller', function($scope, greetingService) {
  $scope.generateJSON = function(){
   generateIdForComponents();
   addRestrictions();
   // REST
   data = angular.toJson($scope.schema, true);
   headers= {
     'Content-Type': 'application/json',
     'Cache-Control':'no-cache',
     'Access-Control-Allow-Origin': '*'
   };

$http.post('http://127.0.0.1:5000/re/z3', data, {headers:headers}).
    then(function(response) {
        console.log("Merge post ", response.data);
        greetingService.store(response.data);
    });
}});
});

resultsController 应如下所示:

app.controller('resultsController ', function($scope, greetingService) {
  $scope.greeting = greetingService.fetch();
});

然后,在您 'outputOffers.html' 的某处放置:

{{greeting}}

我建议在您的 $scope.generateJSON 方法的回调中,您重定向到 outputOffers 结果页面(您要在其中显示响应 json 数据)并传递 json 数据作为参数。

然后在您的 resultsController 中,您可以将 json 数据(作为参数发送)分配给 $scope.greeting 变量以在您的 outputOffers 视图中使用。

您需要 routeParams 服务来在视图之间传递参数,并且您需要将其注入到您的 resultsController 中。

您还需要在 page2Controller 中使用 $location 服务(以便执行重定向),因此按如下方式注入它:

myApp.controller("page2Controller", function($scope, $location){... 

page2 控制器中的 generateJSON 方法如下所示:

$scope.generateJSON = function(){
   generateIdForComponents();
   addRestrictions();
   // REST
   data = angular.toJson($scope.schema, true);
   headers= {
     'Content-Type': 'application/json',
     'Cache-Control':'no-cache',
     'Access-Control-Allow-Origin': '*'
   };

   $http.post('http://127.0.0.1:5000/re/z3', data, {headers:headers}).
    then(function(response) {
        console.log("Merge post ", response.data);
        //redirect to the outputOffers view, passing the json data as a parameter
        $location.path('results').search({jsonData: response.data });
    });
}});

结果控制器

首先将 $routeParams 注入到您的 resultsController 中,这样我们就可以获取与 url 一起发送的任何参数(将 myApp 替换为您的应用名称):

myApp.controller("resultsController", function($scope, $routeParams){...

在 resultsController 中使用匿名函数来检查 jsonData 参数是否存在(我们从 page2 控制器发送的)。如果它确实存在,那么我们将它分配给一个 $scope.greeting 变量

(function() {
  if($routeParams.jsonData == null || $routeParams.jsonData === ""){
    //If the jsonData is not set or if it doesnt contain a value (i.e is the empty string) then redirect to the page2 view.
    $location.path('topage2'); 
  }else{ 
    //the jsonData parameter does exist so assign it to our scope.greeting variable so we can use it in our view.
    $scope.greeting = $routeParams.jsonData;
    //log the data to make sure it was passed as parameter:
    console.log($scope.greeting);
  }
})();

然后在 outputOffers.html 视图中您可以使用 $scope.greeting 变量。 例如,如果 json 包含一个 "title" 和一个 "message" 属性 那么我们可以执行以下操作:

<p>{{greeting.title}}</p>
<p>{{greeting.message}}</p>

更新:

在您的评论中看到您的 json 片段后,您可以执行以下操作来显示它:

<div ng-repeat="g in greeting"> 
  <p>id: {{g.id}}</p>
  <p>clockspeed: {{g.offer.clockSpeed}} </p>
</div>