首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于angularJS工厂的角用户界面路由解析

基于angularJS工厂的角用户界面路由解析
EN

Stack Overflow用户
提问于 2015-07-18 18:34:28
回答 1查看 1.4K关注 0票数 2

我正试图在我创建的工厂中使用$stateProvider解析。

出于某种原因,工厂的承诺是一个空对象。

但是,当我从$http调用中记录数据时,我从.json文件中获得数据。

知道为什么我的defer.promise是一个空对象吗?

playlistsService.js

代码语言:javascript
复制
(function () {
    'use strict';

    angular
        .module('app.core')
        .factory('playlistsService', playlistsService);

    playlistsService.$inject = ['$http', '$q'];

    /* @ngInject */
    function playlistsService($http, $q) {
        var service = {
            loadPlaylists : loadPlaylists
        };

        return service;

        ////////////////

        function loadPlaylists() {
            var defer = $q.defer();
            $http.get('data/playlists.json')
                .success(function (data) {
                    console.log('json data: ' + angular.toJson(data));
                    defer.resolve(data);
                });
            console.log('defer.promise: ' + angular.toJson(defer.promise));
            return defer.promise;
        }
    }

})();

playlists.js

代码语言:javascript
复制
(function () {
    'use strict';

    angular
        .module('app.playlists')
        .config(stateProvider)
        .controller('Playlists', Playlists);

    stateProvider.$inject = ['$stateProvider'];
    Playlists.$inject = ['playlistsService'];

    /* @ngInject */
    function stateProvider($stateProvider){
        $stateProvider
            .state('app.playlists', {
                url: '/playlists',
                views: {
                    'menuContent': {
                        templateUrl: 'app/playlists/playlists.html',
                        controller: 'Playlists as vm',
                        resolve: {
                            playlists: function(playlistsService){
                                return playlistsService.loadPlaylists();
                            }
                        }
                    }
                }
            })
    }

    /* @ngInject */
    function Playlists(playlists) {
        /* jshint validthis: true */
        var vm = this;

        vm.activate = activate;
        vm.title = 'Playlists';
        vm.playlists = playlists;

        activate();

        ////////////////

        function activate() {
            console.log('playlists object: ' + angular.toJson(vm.playlists))
            console.log('playlists from service: ' + angular.toJson(playlists))
        }


    }

})();

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-18 18:41:40

您的Playlists控制器应该让$inject --已经用解析函数而不是playlistsService创建的playlists承诺--将起作用。

代码语言:javascript
复制
Playlists.$inject = ['playlists'];

更新

您还可以使用$http.get创建的承诺,而不是创建自定义承诺。

服务

代码语言:javascript
复制
function loadPlaylists() {
     return $http.get('data/playlists.json')
     .then(function (data) {
         console.log('json data: ' + angular.toJson(data));
         return data;
     });
}

解析

代码语言:javascript
复制
resolve: {
    playlists: function(playlistsService){
         return playlistsService.loadPlaylists();
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31494290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档