1

/ * hablo español* /

1-我有这个json:

{  "pizarra": [
    {

        "director": "",
        "local": "pizarra",
        "telefono": ["2085236", "2085237", "2085238", "2085239", "2085240", "2085241", "2085242"],
        "ext": ["0", "211"],
        "ubicacion": "lobby",
        "puerta": "15202"


    }
],

    "dirgeneral": [
        {

            "director": "Blanca Rosa Hung Ramos",
            "local": "Secretaria",
            "telefono": ["2082546", "2086376"],
            "ext": ["258"],
            "ubicacion": "Edif. 1 piso 1",
            "puerta": "2"
        },
        {
            "director": "Blanca Rosa Hung Ramos",
            "local": "Especialista de cuadros",
            "telefono": ["2086534"],
            "ext": ["270"],
            "ubicacion": "Edif. 1 piso 1",
            "puerta": "2"
        }
    ]}
      ...

2-我有这条路线:

agendaApp.config(['$routeProvider', function($routeProvider){
        $routeProvider.
            when('/', {
                templateUrl: 'src/views/agenda.html',    <----see i use the same view
                controller: 'pizarraCtrl'
            }).
            when('/pizarra', {
                templateUrl: 'src/views/agenda.html',    <----see i use the same view
                controller: 'pizarraCtrl'
            }).
            when('/direccion-general', {
                templateUrl: 'src/views/agenda.html',    <----see i use the same view
                controller: 'dirGrlCtrl'
            }).
       ...

3-我有这项服务:

agendaServices.factory('getApp',['$resource', function($resource){

return $resource('./data/directorio.json', {}, {

    query: {method: 'GET',  isArray: false}
});
   ...

4-我有这个控制器

   agendaControllers.controller('pizarraCtrl', ['$scope', '$rootScope', 'getApp', function ($scope, $rootScope, getApp) {

        var data = getApp.query();
        $rootScope.datos = data;

console.log(data);



}]);
 agendaControllers.controller('dirGrlCtrl', ['$scope', '$rootScope', 'getApp', function ($scope, $rootScope, getApp) {

        var data = getApp.query();
        $rootScope.datos = data;

console.log(data);



}]);
...

5-我有这个部分:

<tr ng-repeat="dir in datos | filter: query | orderBy: orden">

        <td style="width: 200px">{{ dir.local }}</td>
        <td style="width: 120px">
            <select>
                <option ng-repeat="phone in dir.telefono">
                    {{ phone }}
                </option>
            </select>
        </td>
        <td style="width: 80px">
            <select>
                <option ng-repeat="ext in dir.ext">
                    {{ext }}
                </option>
            </select>
            </td>
        <td style="width: 95px">{{ dir.ubicacion }}</td>
        <td style="width: 80px;">{{ dir.puerta }}</td>
    </tr>

我需要的是使用相同的视图来绑定比萨拉 url 和 dirgeneral url。我知道用不同的视图来做,<tr ng-repeat="dir in datos.pizarra | filter: query | orderBy: orden">或者<tr ng-repeat="dir in datos.dirgeneral | filter: query | orderBy: orden">但是如果我尝试过滤控制器中的数据,就像这样:$rootScope.datos = data.pizarra;它不会绑定所需的数据。当我在我的控制器中放入一个 console.log(data); 然后查看我的萤火虫,我收到的数据是这样的:f { $promise={...}, $resolved=false, $get=function(), más...}为什么是 f?当我点击它时:

$promise
    Object { then=function(), catch=function(), finally=function()}

$resolved
    true


dirgeneral
    [Object { director="Blanca Rosa Hung Ramos", local="Secretaria", telefono=[2], más...}, Object { director="Blanca Rosa Hung Ramos", local="Especialista de cuadros", telefono=[1], más...}, Object { director="Blanca Rosa Hung Ramos", local="Auditoria", telefono=[1], más...}, Object { director="Blanca Rosa Hung Ramos", local="Asesor Juridico", telefono=[1], más...}]


pizarra
    [Object { local="pizarra", telefono=[7], ext=[2], más...}]

$delete
    function() 
...
4

1 回答 1

1

在这部分:

var data = getApp.query();

查询方法返回一个数据的承诺;发生这种情况是因为它是一种异步 AJAX 方法。我建议你这样做:

getApp.query( function (data) {
    $scope.datos = data.pizarra;
});

我建议仅使用 $scope 而不是 $rootScope 并且如果使用您需要的数据中的信息而不使用过滤器来分隔控制器:$scope.datos = data.pizarra并且根据控制器,您将使用 .pizarra 或 .dirgeneral 而不使用过滤器。

用谷歌翻译翻译。原答案如下。


En esta parte:

var data = getApp.query();

El metodo.query te regresa una promesa de datos, esto pasa porque es un metodo asincrono ajax, te recomiendo hacer esto:

getApp.query( function (data) {
    $scope.datos = data.pizarra;
});

Te recomiendo usar solo el $scope en vez de $rootScope y si los controladores estan separados usa la informationacion en datos que necesitas sin usar un filter: $scope.datos = data.pizarra yadependiendo en el controlador que lo hagas usarias .p​​izarra o .dirgeneral y sin usar el 过滤器。

于 2014-03-07T19:57:46.070 回答