在AngularJS中使用$ http将数据传递到控制器

时间:2019-01-29 16:07:54

标签: angularjs rest web-services

我正在AngularJS中创建一个小型联系人应用程序,并希望通过调用Web服务来检索数据。

我在VS中创建了两个项目(一个网站用于angularJS代码,一个Web应用程序用于Web服务代码)。我把它们都放在同一个解决方案下。

这是我的index.html标记:

<body ng-app="app" ng-controller="controller" ng-cloak>
    <div class="header" ng-bind="header"></div>
    <div class="content">
        <!-- This content will switch -->
        <ui-view></ui-view>
    </div>...

我的contacts.html标记,位于ui-view标记内:

  <ul>
     <li ng-repeat="c in contacts" >...

在JS中,我创建了以下服务:

// Contacts Service
        app.service("getContacts", function ($http, $q) {                    
            // web-service path
            var ws = "http://localhost:65123/";
            var getContact = function () {
                //create defer object
                var contactsPromise = $q.defer();
                $http.get(ws + "api/Contact")
                    .then(function (res) { contactsPromise.resolve(res);
                    }, function (err) { contactsPromise.reject(err); });
                return contactsPromise.promise;
            };
            return
            { getContact: getContact }
        });

和以下索引控制器:

//index(root) Controller 
        app.controller("controller", function ($scope,getContacts) {
            $scope.contacts = getContacts.getContact().then(function(res){ $scope.contacts = res; });
        });

在Web应用程序中,我创建了一个模型:

    public class Contact
        {
            public string name;
            public string phone;
            public string mail;
            public string address;
            public static List<Contact> getContacts() {
// TODO retrieve Contacts from DB
                List<Contact> c = new List<Contact>();
                c.Add(new Contact() { name="aaaa", phone="111", mail="aaaa@gmail.com",address="sdsd"});
                c.Add(new Contact() { name = "bbbb", phone = "222", mail = "b@g.com", address = "sss" });
                c.Add(new Contact() { name = "cc", phone = "444", mail = "a@l.com", address = "ggg" });
                return c;
        }

及其控制器:

namespace WebApplication1.Controllers
{
    public class ContactController : ApiController
    {
        // GET: api/Contact
        public List<Contact> Get()
        {
            return Contact.getContacts();
        }
}
}

当我运行整个项目(包括Angular和WS)时,出现ERR_CONNECTION_REFUSED错误。 这可能是什么问题?使用$ http的ajax调用有问题吗?

P.S。我在Web应用程序中允许使用CORS。

1 个答案:

答案 0 :(得分:1)

作为依赖项添加的“ getContacts”将仅返回一个Promise,而不返回您想要的列表。它应该看起来像这样:

//index(root) Controller 
    app.controller("controller", function ($scope,getContacts) {
        getContacts.then(function(contacts){ $scope.contacts = contacts; });
    });

我希望这是您正在寻找的答案!