在某处使用$ http时,AngularJS范围变量无法正常工作

时间:2015-11-06 11:08:53

标签: javascript php angularjs

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

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

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

然后我为today变量得到了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文件不是问题,它也没有工作,所以这不是看起来像这里的问题。

2 个答案:

答案 0 :(得分:1)

使用$ http的正确方法是

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

使用.then()代替.success()

答案 1 :(得分:0)

你的语法有点错误。 :)

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

您已忘记在控制器功能之前添加$ http作为字符串。

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

  

关于缩小的注释   由于Angular将控制器的依赖关系从参数名称推断到控制器的构造函数,如果你要缩小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) {...}]);