Tengo un objeto JSON que no tiene datos adecuados. Así que quiero reemplazar el valor obtenido con uno de una tabla de búsqueda, pero no estoy seguro de cómo reemplazar el valor de los datos correspondientes a la tabla de búsqueda.

lookupTable = {
  "pizza": function() {
    console.log("food");
  },
  "house": function() {
    console.log("building");
  },
  "air": function() {
    console.log("nothing");
  }
};
$scope.value =lookupTable["pizza"]()

Mi archivo html tiene

<tr ng-repeat="x in names">
    <td>{{ x.lookupTable["pizza"]() }}</td> 

Mi código está en http://plnkr.co/edit/w4lOFVRo9vSi8vqfbpXV?p=preview

¡Cualquier ayuda es apreciada!

1
user5186342 10 dic. 2015 a las 12:14

3 respuestas

La mejor respuesta

Tu código es muy confuso. Traté de editar su plunker, tal vez sea más fácil de ver que explicar.

<!DOCTYPE html>
<html>
<scriptsrc="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>

<body>

  <div ng-app="myApp" ng-controller="customersCtrl">

    <table>
      <tr ng-repeat="x in names">
        <td>{{ lookupTable[x.Name] }}</td> 
      </tr>
    </table>

  </div>

  <script>
    var app = angular.module('myApp', []);
    app.controller('customersCtrl', function($scope, $http) {
      $http.get("data.json")
        .then(function(response) {
          $scope.names = response.data.records;
      });


    lookupTable = {
      "pizza": "food",
      "house": "building",
      "air": "nothing"
    };
    $scope.lookupTable = lookupTable;
    $scope.value = lookupTable["pizza"]
    console.log(lookupTable["house"]) 
    });
  </script>
0
squaleLis 10 dic. 2015 a las 09:45

Mirando su código, no estoy segura de lo que quiere lograr.

El ng-repeat le da tres objetos fuera de los nombres, pero ninguno de ellos tiene un miembro de tabla de búsqueda, por lo que {{x.lookupTable ["pizza"]}} falla en silencio.

Puede hacerlo visible, si solo se une a {{x}}

0
Guenter Guckelsberger 10 dic. 2015 a las 09:44

Aquí hay algunos problemas en su código desde el enlace que proporcionó:

  1. Las funciones en lookupTable no devuelven nada como se señaló en las respuestas anteriores.
  2. lookupTable no es una propiedad de $scope.names, por lo que usar x.lookupTable no es válido.

Para que funcione, debes:

  1. Las funciones de lookupTable deberían return los valores reales en lugar de utilizar console.log
  2. Enlace lookupTable a $scope
  3. Utilice lookupTable directamente dentro de la vista, ya que está vinculado a $scope

Aquí está el código relevante:

<div ng-app="myApp" ng-controller="customersCtrl">
  <table>
    <tr ng-repeat="x in names">
      <td>{{ lookupTable[x.Name]() }}</td> 

    </tr>
  </table>
</div>

<script>
  var app = angular.module('myApp', []);
  app.controller('customersCtrl', function($scope, $http) {
    $http.get("data.json")
    .then(function(response) {
      $scope.names = response.data.records;
    });


    $scope.lookupTable = {
      "pizza": function() {
        return 'food';
      },
      "house": function() {
        return 'building';
      },
      "air": function() {
        return "nothing";
      }
    };

  });
</script>
1
knn 10 dic. 2015 a las 10:03