Javascript 简单角度服务混淆

Javascript 简单角度服务混淆,javascript,angularjs,angularjs-service,Javascript,Angularjs,Angularjs Service,简单地说,角度服务总是让我感到困惑,我似乎通过尝试和错误让它们工作。我想知道为什么在这种情况下,数据返回未定义 应用程序模块: var app = angular.module('myApp', ['services']); 服务: //creating a service module var appServices = angular.module('services', []); appServices.factory('Data', function(){ return {messa

简单地说,角度服务总是让我感到困惑,我似乎通过尝试和错误让它们工作。我想知道为什么在这种情况下,数据返回未定义

应用程序模块:

var app = angular.module('myApp', ['services']);
服务:

//creating a service module
var appServices = angular.module('services', []);

appServices.factory('Data', function(){
return {message : "I am data"}
});
控制器:

app.controller('firstCtrl',['Data',
function($scope, Data){
    //get data from the service
    $scope.data = Data;
    console.log(Data);

}]);

app.controller('secondCtrl',['Data',
function($scope, Data){
    //get data from the service
    $scope.data = Data;

}]);
如果我控制台日志数据,我只会得到“未定义”。 我只是想做一个简单的例子来返回对象{消息:“我是数据”} 所以

$scope.data=数据

然后在视图中

data.message=“我是数据”


如果您能解释一下为什么这不起作用,我将不胜感激。谢谢

您没有将
$scope
注入控制器。将其更改为:

app.controller('firstCtrl', [
    '$scope', // There should be an element of this array for each parameter
    'Data',
    function($scope, Data){
        //get data from the service
        $scope.data = Data;
        console.log(Data);
    }
]);

由于您只注入
数据
服务,它被映射到控制器函数的
$scope
参数,而没有任何东西被映射到
数据
参数(并且由于未隐式分配值的变量的值为
未定义
,您可以看到
未定义
).

您可以使用上述答案,但您可以使用

app.controller('firstCtrl', function($scope, Data){

    //get data from the service
    $scope.data = Data;
    console.log(Data);
});
这将很好地工作,不需要在控制器中传递服务和函数数组,因为第二个参数只是函数可以很好地工作