Angularjs资源服务示例

Angularjs资源服务示例,angularjs,service,resources,Angularjs,Service,Resources,我已经在angularjs服务和资源上挣扎了一段时间,但无法得到我所缺少的东西 下面是我的一个例子: 代码如下详细信息 此小提琴尝试加载2012-20132013-2014期间。。。从web资源中,填写选择项 小提琴不起作用,我希望$scope.perriodeJson由periodes服务填充。http get请求运行,但我只得到一个空对象,并且没有得到我期望的任何更新。 Thanx指出了代码中的错误,并提出了增强建议 <div ng-app='mod_periodes'>

我已经在angularjs服务和资源上挣扎了一段时间,但无法得到我所缺少的东西

下面是我的一个例子: 代码如下详细信息

此小提琴尝试加载2012-20132013-2014期间。。。从web资源中,填写选择项

小提琴不起作用,我希望$scope.perriodeJson由periodes服务填充。http get请求运行,但我只得到一个空对象,并且没有得到我期望的任何更新。 Thanx指出了代码中的错误,并提出了增强建议

<div ng-app='mod_periodes'>
    <div id="appChoixPeriode" ng-controller='CtrlChoixPeriode'>
        test:{{test}}<hr>
        json periodes:{{periodeJson}}<hr>
        Select periode: 
        <select ng-model="periodeSelect" ng-options="item.name for item in periodeSelectModel" ng-change="changePeriodeUtilisee()"></select>

        <button type='button' ng-click='resetDefaultPeriode()'>G</button>
    </div><!--appChoixPeriode-->
</div>

angular.module('mod_periodes', ['ngResource']);

angular.module('mod_periodes').factory('periodes', function($resource) {
      var  res = $resource('http://emm.menard.free.fr/test/fakereq.html');
    /*content returned:
    {"status":"success",
    "data":{
        "periodes":[
            {"id_periode":"1","name":"2012-2013","ts_debut":"2012-07-01 00:00:00","ts_fin":"2013-06-30 23:59:59"},
            {id_periode":"2","name":"2013-2014","ts_debut":"2013-07-01 00:00:00","ts_fin":"2014-06-30 23:59:59"},
            {"id_periode":"3","name":"2014-2015","ts_debut":"2014-07-01 00:00:00","ts_fin":"2015-06-30 23:59:59"}
            ],
        "id_periode":"2",
        "temps_periode_utilisee":"present"},
    "messages":[]}
    */
      return res;
});

angular.module('mod_periodes').controller('CtrlChoixPeriode',implCtrlChoixPeriode);

function implCtrlChoixPeriode($scope, $resource, periodes) {
    $scope.test="angular works";
    $scope.periodeJson=periodes.get(); //why dont I get anything in $scope.periodeJson??
    //the http request runs and looks successful

    //below this, what I intended to do once I retrieve data
   /* $scope.periodeJson=periodes.get(function() {
        $scope.periodeSelectModel=$scope.periodeJson.data.periodes;
        $scope.periodeSelect=$scope.periodeSelectModel[1];
    });*/
//   $scope.periodeSelectModel=$scope.periodeJson.data.periodes;
//   $scope.periodeSelect=$scope.periodeSelectModel[1];
}

正如ranru所指出的,我的问题来自跨域问题

以下是我在本地运行的示例:

<html>
<head>
<title>example</title>
<meta  charset='utf-8'>

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.2/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.2/angular-resource.min.js"></script>

<script>
angular.module('mod_periodes', ['ngResource']);

angular.module('mod_periodes').factory('periodes', function($resource) {
     ////////// here the url domain must be the same as the one hosting this page
     //var  res = $resource('http://myserv/fakereq.html');
     /////////////////////////////

    /*content returned:
    {"status":"success",
    "data":{
        "periodes":[
            {"id_periode":"1","name":"2012-2013","ts_debut":"2012-07-01 00:00:00","ts_fin":"2013-06-30 23:59:59"},
            {id_periode":"2","name":"2013-2014","ts_debut":"2013-07-01 00:00:00","ts_fin":"2014-06-30 23:59:59"},
            {"id_periode":"3","name":"2014-2015","ts_debut":"2014-07-01 00:00:00","ts_fin":"2015-06-30 23:59:59"}
            ],
        "id_periode":"2",
        "temps_periode_utilisee":"present"},
    "messages":[]}
    */
      return res;
});

angular.module('mod_periodes').controller('CtrlChoixPeriode',implCtrlChoixPeriode);

function implCtrlChoixPeriode($scope, $resource, periodes) {
    $scope.test="angular works";
    //this way, different $scope vars are set when the resource is received
    $scope.periodeJson=periodes.get(function() {
        $scope.periodeSelectModel=$scope.periodeJson.data.periodes;
        $scope.periodeSelect=$scope.periodeSelectModel[1];
    });
}

</script>

</head>
<body>

<div ng-app='mod_periodes'>
<div id="appChoixPeriode" ng-controller='CtrlChoixPeriode'>
    test:{{test}}<hr>
    json periodes:{{periodeJson}}<hr>
    Select periode: 
    <select ng-model="periodeSelect" ng-options="item.name for item in periodeSelectModel" ng-change="changePeriodeUtilisee()"></select>
</div><!--appChoixPeriode-->
</div>

</body>

由于跨域问题,小提琴不起作用。在您的实际实现中,资源是否位于不同的域中?可能是的,我从本地文件中尝试了此示例的本地版本。我会尝试将evrything放在同一台服务器上,看看它是否工作得更好。我知道这一点,因为我在没有跨域限制的浏览器中尝试了你的小提琴,它工作得很好。非常感谢,一旦evrything放在同一台服务器上,它就工作了。你知道如何处理跨服务器的案例吗?只是为了提供信息,我不需要它,但如果我能掌握如何实现这一点,那就太好了,这将取决于资源的服务方式。您会同意,从静态html文件获取它不是最好的。但是,您可以在这里获得有关CORS的一些有用信息