1

/ *ハブロ・エスパニョール* /

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>

私が必要としているのは、pizzarra の 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); を入れると、次に、firebug を調べると、受け取ったデータは次のとおりです: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();

query メソッドはデータの promise を返します。これは、非同期 AJAX メソッドであるためです。これを行うことをお勧めします:

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

$rootScope の代わりに $scope のみを使用することをお勧めします。コントローラーが必要なデータ内の情報を使用して分離されている場合は、フィルターを使用し$scope.datos = data.pizarraません。コントローラーによっては、フィルターを使用せずに .pizarra または .dirgeneral を使用します。

Google 翻訳で翻訳しました。元の答えは以下です。


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 informacion 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 に答える