2015-11-06 58 views
1

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

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

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

然后我得到的6.11.2015用于例如今天变量适当的输出。 但只要我把这个或使用服务:

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文件不是问题,并且它也不起作用,所以在这里似乎没有问题。

回答

0

你的语法有一点小错误。 :)

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

你forgoten控制器功能前加$ HTTP作为字符串。

看看这个Angular Doc about Dependency Injection。寻找“关于缩小的注意事项”。

上缩小 注意事项由于角度推断控制器的依赖从参数控制器的构造函数的名字,如果你是来缩小为PhoneListCtrl控制器的JavaScript代码,它的所有函数参数将精缩以及,并且依赖注入器将无法正确识别服务。

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

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

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

使用内联注释哪里,而不是仅仅提供此项功能,您提供的数组。该数组包含服务名称的列表,后面跟着函数本身。 PhoneListCtrl($ scope,$ http){...} phonecatApp.controller('PhoneListCtrl',['$ scope','$ http',PhoneListCtrl]); 这两种方法都可以与Angular注入的任何函数一起工作,所以这取决于您项目的风格指南来决定使用哪一个函数。

当使用第二种方法,它是常见的注册控制器时提供的构造函数内联作为一个匿名功能:

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

+0

谢谢!唉,我有时候很愚蠢* facepalm * – Linda

+0

如果你认为你是,你应该看看[这个](http://stackoverflow.com/questions/32957123/express-router-crud-api-cannot-删除)我的问题。哈哈。 – Rodmentou

1

的正确方式使用$ HTTP是

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

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