角度注入解析到控制器记录未定义

时间:2015-10-07 03:48:06

标签: javascript angularjs url-routing

我有以下决心:

.state('posts', {
      url: '/posts/{id}',
      templateUrl: 'posts.html',
      controller: 'postsController as postsCtrl',
      resolve: {
        post: getSinglePostWrapper
      }
    })

和辅助函数

getSinglePostWrapper.$inject = ['postsService', '$stateParams'];
function getSinglePostWrapper(postsService, $stateParams) {
    return postsService.getSinglePost($stateParams.id);
}

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

angular.module('flapperNews')
.controller('postsController', postsController);

postsController.$inject = ['postsService', 'post'];

function postsController(postsService, post) { 
   var vm = this;
   vm.post = post;
   console.log(post); //undefined here
}

当我尝试从解决方案中注入帖子时,我收到了一个未定义的“帖子”。我尝试在getSinglePostWrapper函数中记录帖子,并记录正确的对象。我似乎正在失去一些约束力,或者从控制器的决心中失去一些东西。

发布服务

angular.module('flapperNews')
.factory('postsService', postsService);

postsService.$inject = ['httpService'];

function postsService(httpService) {
  return {
        getSinglePost: getSinglePost
  }
  function getSinglePost(postId) {
        httpService.baseGet('/posts/' + postId)
        .then(function(data) {
            return data;
        }, function(data) {});
  }
}

的HTTPService

angular.module('httpService', [])
.factory('httpService', httpService);

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

function httpService($http, $q) {
  return {
        baseGet: baseGet
  }
  function baseGet(url) {
        return $http.get(url).then(
                function (result) {
                    return result.data;
                },
                function (result) {
                    return $q.reject(result);
                }
        );
    }

}

我已经将httpservice注入到我声明flapperNews模块的第一个位置。

仅供参考 - 一切正常。其他http请求也没问题。这个也很好。它只是不将帖子注入控制器。

2 个答案:

答案 0 :(得分:2)

在这里承诺连锁店。

  function getSinglePost(postId) {
        httpService.baseGet('/posts/' + postId)
        .then(function(data) {
            return data;
        }, function(data) {});
  }

您不会返回承诺,因此在post请求完成之前,undefined将被解析为httpService.baseGet

答案 1 :(得分:0)

试试这个:

#include <stdio.h>
#include <stdlib.h>

void decimal_binary(int, char *);

int main(void)
{
    int n;
    char buffer[9];
    char *ptr = buffer;

    printf("Enter the number\n");
    scanf("%d", &n);

    decimal_binary(n, buffer);

    while (*ptr != '\0')
    {
        printf("%c", *ptr);
        ptr++;
    }
    putchar('\n');

    return 0;
}

void decimal_binary(int n, char *pointer)
{
    for (int c = 7; c >= 0; c--)
        pointer[7 - c] = ((n >> c) & 1) + '0';
    pointer[8] = '\0';
}