【问题标题】:Creating a factory service with ngresource using just one view from multiples controllers仅使用来自多个控制器的一个视图使用 ngresource 创建工厂服务
【发布时间】:2014-05-20 22:38:08
【问题描述】:

/* 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>

我需要使用相同的视图来绑定 Pizzarra url 和 dirgeneral url。 我知道用不同的视图来做这件事,把 &lt;tr ng-repeat="dir in datos.pizarra | filter: query | orderBy: orden"&gt;&lt;tr ng-repeat="dir in datos.dirgeneral | filter: query | orderBy: orden"&gt; 但是如果我尝试过滤控制器中的数据,就像这样:$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() 
...

【问题讨论】:

    标签: javascript angularjs service ngresource


    【解决方案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 .pizarra o .dirgeneral y sin usar el 过滤器。

    【讨论】:

    • 这是一个只有英文的网站。我试图翻译你的答案,但无疑犯了错误;请随时纠正。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    相关资源
    最近更新 更多