AngularJS 工厂和控制器代码,不产生任何东西

Posted

技术标签:

【中文标题】AngularJS 工厂和控制器代码,不产生任何东西【英文标题】:AngularJS factory and controller code, not producing anything 【发布时间】:2019-05-20 05:40:29 【问题描述】:

当下面的代码运行时,我的控制台中没有任何显示表明出现任何问题,但正如您在 listService 中看到的那样,它会在结果中发出警报,但警报显示为“未定义”。

我最终试图让它重复运行以列出视图中的所有组织。任何帮助表示赞赏!

这是我的工厂。

app.factory("listService", ["$rootScope", "$http", "$location", "$routeParams",
    function($rootScope, $http, $location, $routeParams) 
        var siteURL = "jdfyhgyjdfghyjdgfyhkjyhjk";
        var svc = ;
        var data = null;

        svc.getListItems = function(listName) 
            $http(
                url: siteURL + "/_api/web/lists/GetByTitle('" + listName + "')/items",
                method: "GET",
                async: false,
                headers: 
                    "Accept": "application/json;odata=verbose",
                    "X-RequestDigest": jQuery("#__REQUESTDIGEST").val()
                ,
                success: function(response, status, headers, config) 
                    data = response.data.d.results;
                    alert(data);
                ,
                error: function(response, status, headers, config) 
                    $rootScope.error = status;
                
            );
        
        return svc;
    
]);

这是我的控制器。

app.controller("readOrganizationsCtrl", ["$scope", "$http", "$location", "$routeParams", "listService",
    function($scope, $http, $location, $routeParams, listService) 
        $scope.organizations = listService.getListItems('Organizations');
    
]);

最后是我的观点。

<div class="form-group">
    <input type="text" class="form-control" id="search" placeholder="Search organizations" data-ng-model="search" />
</div>
<table class="table table-stripped table-hover">
    <thead>
        <tr>
            <th>Title</th>
        </tr>
    </thead>
    <tbody>
        <tr data-ng-repeat="organization in organizations | filter:search" data-ng-click="editOrganization($index)">
            <td>organization.Title</td>
        </tr>
    </tbody>
</table>
<div class="form-group">
    <button data-ng-click="addOrganization()" class="btn btn-primary">Add Organization</button>
</div>
"Error:" + error

【问题讨论】:

$http 服务不是jQuery.ajax。阅读AngularJS $http Service API Reference - General Usage。 【参考方案1】:

在控制器中调用 $http 后,您可以轻松地从 siteURL 获取所有组织,这里是工作代码: JS:

 var app = angular.module('plunker', []);

    app.controller('MainCtrl', function($scope, $http) 
            $http(
                method: 'GET',
                url: 'organizations.json',
                headers: 
                 withCredentials: true,
                 headers: 'Content-Type': 'application/x-www-form-urlencoded',
                 ,
                )
                .then(function successCallback(data) 
                    $scope.organizations = data.data;
                    console.log($scope.organizations)

                , function errorCallback(response) 
                    console.log(response);
                    console.log('error');
                );    
    );

html

 <tbody>
        <tr data-ng-repeat="organization in organizations | filter:search" data-ng-click="editOrganization($index)">
            <td>organization.name</td>
        </tr>
    </tbody>

plunker:http://plnkr.co/edit/aP7fLU1tfWwmZdCAYzIf?p=preview

或者,如果你想通过工厂来做,你可以这样做:

app.controller('MainCtrl', function($scope, $http, factory) 

      factory.getOrganizations()
         .then(function(data)
            $scope.organizations = data.data;
                    console.log($scope.organizations)
         )
         .catch(function()
         )
      );

app.factory('factory',function($http)
  return 
     getOrganizations: function()
        return $http.get('organizations.json');
     
  ;
)

plunker:http://plnkr.co/edit/UJUrTIGHGtjjccGAnHlk?p=preview

【讨论】:

你为什么有async: false? $http 服务忽略该属性是一件好事。 @georgeawg 嗯,是的,你是对的。我只是不小心从 Darkmatter5 代码中复制了它 太棒了,但是当我像这样在 SharePoint 数据上运行它时,它不想解析数据,因为返回的结果不是数组。 忽略,我做了“$scope.organizations = data.data.d.results;”现在它可以工作了。 @Darkmatter5 竖起大拇指!

以上是关于AngularJS 工厂和控制器代码,不产生任何东西的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS 工厂变量未定义

AngularJS - 工厂变量不会在控制器中更新

AngularJS:何时使用服务而不是工厂

AngularJS:何时使用服务而不是工厂

AngularJS:为啥人们更喜欢工厂在控制器之间共享数据[重复]

angular js:是不是需要在模块文件中加载所有控制器和工厂/服务