AngularJS范围变量在某处使用$http时不起作用


AngularJS scope variables not working when using $http somewhere

每当我尝试使用$http.get时(无论是在控制器中还是在服务中),我的$scope变量都会出现问题。

我的控制器看起来像这样:

app.controller('HomeController', ['$scope', function($scope, $http) {
    $scope.today = new Date();
}]);

然后我得到了一个合适的输出6.11.2015,例如today变量。但只要我输入这个或使用服务:

app.controller('HomeController', ['$scope', function($scope, $http) {
    $scope.today = new Date();
    $http.get("data/selectAll.php")
    .success(function(data) {
        $scope.lokale = data;
    });
}]);

然后它就不起作用了,我只得到了{{today | date : 'dd.MM.yyyy'}}$scope.lokale变量也不起作用。我试着使用json文件(我知道它确实有效)来确保我的php文件不是问题所在,但它也不起作用,所以这似乎不是问题所在。

使用$http的正确方法是

$http.get('/someUrl', config).then(successCallback, errorCallback);

使用.then()而不是.success()

您的语法有一个小错误。:)

app.controller('HomeController', ['$scope', '$http', function($scope, $http) {

您已经放弃在控制器函数之前添加$http作为字符串。

看看这个关于依赖注入的Angular文档。查找"关于最小化的注释"。

关于最小化的一个注记由于Angular从控制器构造函数的参数名称推断控制器的依赖项,因此如果要缩小PhoneListCtrl控制器的JavaScript代码,其所有函数参数也将被缩小,依赖项注入器将无法正确识别服务。

我们可以通过用依赖项的名称来注释函数来克服这个问题,这些依赖项以字符串的形式提供,不会被缩小。有两种方法可以提供这些注入注释:

在控制器函数上创建$inject属性,该属性包含一个字符串数组。数组中的每个字符串都是要为相应参数注入的服务的名称。在我们的例子中,我们会写:

function PhoneListCtrl($scope, $http) {...}`
PhoneListCtrl.$inject = ['$scope', '$http'];
phonecatApp.controller('PhoneListCtrl', PhoneListCtrl);

使用内联注释,其中不只是提供函数,而是提供数组。此数组包含一个服务名称列表,后跟函数本身。

函数PhoneListCtrl($scope,$http){…}phonecatApp.controller('PhoneListCtrl',['$scope','$http',PhoneListctr]);这两种方法都适用于Angular可以注入的任何函数,因此使用哪种方法取决于项目的风格指南。

当使用第二种方法时,通常在注册控制器时以匿名函数的形式内联提供构造函数:

phonecatApp.controller('PhoneListCtrl', ['$scope', '$http', function($scope, $http) {...}]);