基于REST响应的动态HTML部分

时间:2017-04-07 17:28:16

标签: javascript angularjs rest partials

我正在构建一个使用Angular JS前端和基于REST的API后端为MySQL数据库提供的应用程序。从前端到后端进行REST调用以填充或检索数据库中的数据。我想在我的角度JS前端主页上添加一个下拉选择框。我希望选择触发对数据库的REST调用,以检索特定值并使该值成为动态加载的html部分的一部分。

例如,下拉菜单会选择汽车模型(Toyota Corolla,Honda Accord等)当您选择该模型时,控制器会对相应的表格进行REST调用以获取该车的其他信息(MPG,大小,重量等)一旦这样做,它将在页面上加载部分HTML,该页面是模板HTML文件但具有动态内容。所以加载的页面是/#/ carInfo?toyotaCorolla。将加载模板部分html文件,然后模板上的表将填充来自该REST调用的响应。所以我基本上只有一个模板用于该页面,但它会根据所选内容调用页面的新版本。

我正在考虑这个问题,而且我的应用程序代码没有。这个问题不是针对实际的代码解决方案,而是针对某人编写一些伪代码或指向我在线的演示/示例,如果它甚至是可能的话。我正在自己进行搜索,但我可能正在寻找错误的术语来完成这项工作。任何指针或帮助都将不胜感激。

更新: 现在我回家了,这里是我遇到问题的代码片段。

<ul class="nav navbar-nav">
    <li><a href="#/home" class="mdi-action-home"></a></li>
    <li class="dropdown">
        <a href="javascript:void(0)" data-target="#" class="dropdown-toggle" data-toggle="dropdown">
            Select a car...
            <b class="caret"></b></a>
        <ul class="dropdown-menu">
            <li ng-model="selectedCar.value" ng-repeat="x.car for x in cars"
                ng-change="selectedCarChanged()"></li>
        </ul>
    </li>
</ul>

这不正确填充。我使用ng-options而不是ng-repeat来实现<select>实现的相同ng代码。我希望这将是一个简单的过渡,但使用列表的CSS版本无效。

2 个答案:

答案 0 :(得分:1)

请在下面找到代码段。希望这会有所帮助

轿厢list.html

<div ng-controller="carListController">
    <select ng-model="selectedCar" ng-change="onSelectCar(selectedCar)">
        <option ng-repeat="car in cars">{{car}}</option>
    </select>
</div>

carListController.js

app.controller('carListController', function($scope, $location) {
    $scope.carList = ['Honda', 'Toyota', 'Suzuki', 'Hyundai'];
    $scope.onSelectCar = function(car) {
        $location.path('#/carInfo').search({carInfo: car});
    }
});

carInfo.html

<div class="carDetails">
    <span>Car Name: {{car.name}}</span>
    <span>Car Model: {{car.model}}</span>
    <span>Car Year: {{car.year}}</span>
    <span>Car Size: {{car.size}}</span>
</div>

carInfoDetailsController.js

app.controller('carInfoController', function($scope, $location, $http) {
    $scope.car = {};
    $scope.init= function() {
        $http.get('url/' + $location.search('carInfo'), function(response) {
              $scope.car = response;
        });
    };

    $scope.init();
});

appConfig.js

app.config(function($routeProvider){
     $routeProvider.when('/carInfo'{
         templateUrl: "carInfo.html",
         controller: "carInfoController"
     });
});

答案 1 :(得分:1)

类似的东西:

  //in a service    
  (function() {
    function MyService($http) {
        var myService = {};
        MyService.accessMultiTool = function(){
          var args = Array.from(arguments);
          var method, url, authorization;
          args.forEach(function(item){
            if('method' in item){
                    method = item.method;
                }else if ('url' in item){
                    url = item.url;
                }else if ('authorization' in item){
                    authorization = item.authorization;
            }
          });
        delete $http.defaults.headers.common['X-Requested-With'];
        return $http({
                      method: method,
                      origin: 'http://someclient/',
                      url: url,
                      headers: {'Authorization': authorization}
               }).error(function(status){generate some error msg});
       };

    return MyService;
    }

    angular
        .module('myApp')
        .factory('MyService', ['$http', MyService]);
  })();

  //in a controller
  (function () {
      function MyCtrl(MyService) {
          var myController = this;
          this.car_model_options = ["Honda", "Chevy", "Ford", "Nissan"];
          this.bound_car_model_obj = {
             model: null
          };
          this.getCarModel = function(){
            MyService.accessMultiTool({method: 'GET'}, {url: 'http://somebackend/api/cars/' + myController.bound_car_model_obj.model}, {authorization: this.activeMember.auth}).then(function(data){
            myController.setCurrCarModel(data);
          });
          this.setCurrCarModel = function(data){
            myController.currently_selected_car_model = data;
          };
      };

    };

  angular
    .module('myApp')
    .controller('MyCtrl', ['MyService', MyCtrl]);
  })();

  //in a template
  <div ng-controller="MyCtrl as mycontroller">
    <select data-ng-init="this.bound_car_model_obj.model = mycontroller.car_model_options[0]" data-ng-model="this.bound_car_model_obj.model" data-ng-options="option for option in mycontroller.car_model_options" >
    </select>

    <table>
      <tr ng-repeat="car in mycontroller.currently_selected_car_model>
        <td>{{car.someproperty}}>/td> 
        <td>{{car.someotherproperty}}>/td>
      </tr>
    </table>
  </div>