我正在尝试让一个控制器在使用时从服务器检索其数据,但是由于某种原因,这似乎无法正常工作:

app.controller('eventListController', ['$scope', '$http', '$routeParams', function ($scope, $http, $routeParams) {
    var eventList = this,
        getEventList = function () {
            var promise = $http.get('../json/Login.json');
            promise.then(function (response) {
                eventList = response.data;
            }, function (error) {
                window.alert('Error' + error);
            });
        };

    getEventList();
}]);


看起来很简单,但是eventList无法正确加载

我做错了什么?

JSON大致如下所示

{
"eventHead": [
    {
        stuff stuff
    },
    {
         more stuff
    }
],
"success": true


}

如果我做一个

window.alert(eventList);


之后

getEventList();


我得到[object Object],看起来很正常

但是如果我这样做

window.alert(eventList.success);


我不确定

而且我的数据只是没有加载到页面中

最佳答案

您不想使用结果覆盖this(您的控制器)的引用(编辑:我的意思是,您不再引用控制器,而只是引用数据-在视图)。您想在控制器上设置属性-我认为您正在使用controller as语法?在我认为您要实现的目标上,这样做会做得更好:

app.controller('eventListController', ['$scope', '$http', '$routeParams', function ($scope, $http, $routeParams) {
    var that = this;

    var getEventList = function () {
        var promise = $http.get('../json/Login.json');
        promise.then(function (response) {
            that.eventList = response.data;
        }, function (error) {
            console.log('Error', error);
        });
    };

    getEventList();
}]);


编辑:已经多次向我指出,以上(问题)语法是正确的。我同意-这只是不好的做法。您不应使用和换行符定义多个变量。我认为大多数javascript开发人员都会同意它不会增加可读性(我认为误读可以证明这一点)。

07-24 09:50
查看更多