Javascript 角度控制器没有完成?

Javascript 角度控制器没有完成?,javascript,angularjs,ionic-framework,Javascript,Angularjs,Ionic Framework,好的,所以我遗漏了一些东西。我总是遇到这样的问题。很明显,我对角度的理解存在一些基本缺陷 我有一个控制器 angular.module('NextShift') .controller('ContactsCtrl', ['$scope','contactFactory', function($scope, $rootScope, Auth, $localStorage, $stateParams, contactFactory) { console.log("i get t

好的,所以我遗漏了一些东西。我总是遇到这样的问题。很明显,我对角度的理解存在一些基本缺陷

我有一个控制器

angular.module('NextShift')
.controller('ContactsCtrl', ['$scope','contactFactory',
    function($scope, $rootScope, Auth, $localStorage, $stateParams, contactFactory) {
       console.log("i get this far");
       function getContacts() {
        contactFactory.getContacts()
            .success(function(contactList) {
                console.log("why cant i get here");
                $scope.contacts = contactList;
            })
            .error(function(error){
                console.log("or here?");
                $rootScope.error = "Failed to get contacts";
            });
    }
}
]);
一切都在运行,我没有收到任何调试错误。然而,我的模板没有填充任何范围变量。尽管有console.log行,但控制台日志没有填充任何日志

我的工厂

angular.module('NextShift').factory('contactFactory', ['$http', function($http) {
var url = 'http://myurl.example/api/v1';
var contactFactory = {};

contactFactory.getContacts = function () {
    return $http.get(url + '/contacts');
};

contactFactory.getContact = function(id) {
    return $http.get(url + '/contacts/' + id );
}

contactFactory.updateContact = function(contact){
    return $http.put(url + '/contacts/' + id, contact);
}

contactFactory.deleteContact = function(id) {
    return $http.delete(url + '/contacts/' + id);
}

return contactFactory;
}]);
那么我不明白什么呢?它至少应该运行console.log函数。。。但是不是。这是爱奥尼亚框架项目的一部分,但我认为这与此无关。

getContacts in声明为函数,但它在哪里调用?您应该在控制器的某个位置调用getContacts:

angular.module('NextShift')
    .controller('ContactsCtrl', ['$scope', '$rootScope', 'Auth', '$localStorage', '$stateParam's, 'contactFactory',
        function($scope, $rootScope, Auth, $localStorage, $stateParams, contactFactory) {
           console.log("i get this far");

           function getContacts() {
                contactFactory.getContacts()
                .success(function(contactList) {
                    console.log("why cant i get here");
                    $scope.contacts = contactList;
                })
                .error(function(error){
                    console.log("or here?");
                    $rootScope.error = "Failed to get contacts";
                });
           }

           // do something or other
           getContacts();
       }
]);
在每个函数声明之前和之后添加一个空行确实有助于直观地分隔代码,并有助于避免此类错误

注意:如果要调用getContacts,例如从ng click=getContacts,则需要将其分配给$scope变量,如下所示:

$scope.getContacts = function() {....}

注意:我还修复了控制器的依赖项声明-如果您尝试使用其中一个依赖项,您的方法将抛出错误。

首先。。。在编写函数之前,必须将依赖项声明为字符串。。。所有的人,按同样的顺序。。。所以

.controller('ContactsCtrl', ['$scope','contactFactory',
function($scope, $rootScope, Auth, $localStorage, $stateParams, contactFactory)
应该是:

 .controller('ContactsCtrl', ['$scope', '$rootScope', 'Auth', '$localStorage', '$stateParams', 'contactFactory',
function($scope, $rootScope, Auth, $localStorage, $stateParams, contactFactory)
其次,在控制器中,您需要初始化get contacts。。。简言之:

 getContacts();

如果希望在控制器加载后立即开始,请在控制器底部显示。

$http运行异步,因此返回它只会返回未定义的内容。您需要使用其他处理程序来获取您想要的信息,即使返回的是未定义的信息,我是否仍应该获取控制台日志?为什么我不能获取?请尝试此处以获取有关如何使用$http的更多信息。由于没有正确传递变量,因此无法获取控制台日志,因此永远不会调用成功和错误。如果使用正确,我认为处理程序函数的格式不正确,请尝试使用相反,我喜欢示例给出的格式