Angular не вызывает решимости в моем маршруте

0

Я новичок в Angular, и я пытаюсь понять базовый My Project, как Mean.

Мой router.js

router.get('/', function (req, res, next) {
    res.render('index', {});
});

мой Angularfile.js

var app = angular.module('ibApp', ['ngRoute','ui.router']);

app.config([
    '$stateProvider',
    '$urlRouterProvider',
    function ($stateProvider, $urlRouterProvider) {
        $stateProvider.state('home', {
            url: '/',
            resolve: {
                foo: [function () {
                    console.log('inside')
                }]
            }
        });

        $urlRouterProvider.otherwise('home');
    }]);



app.controller("MyCtrl",['$scope',function($scope) {
    console.log("here!");
}]);

my index.html

 <link href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" rel="stylesheet">
    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.10/angular.min.js"></script>
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.1/angular-route.min.js"></script>
    <script src="http://cdnjs.cloudflare.com/ajax/libs/angular-ui-router/0.2.10/angular-ui-router.js"></script>
    <script src="/javascripts/angularApp.js"></script>

Но когда я получаю маршрут/(индекс), у меня нет console.log('inside'), но у меня есть только console.log("здесь");

Я пробовал также http://localhost:3000/#/, но моя проблема сохраняется.

Теги:

1 ответ

2
Лучший ответ

Поставщик Resolve не выполняет функцию в вашем случае. Сама функция возвращается как объект зависимости, потому что функция никогда не вызывается. Если функция вызывается, возвращаемое значение функции рассматривается как зависимость.

пытаться:

resolve: {
    foo: [function () {
            console.log('inside')
          }()]
    }

обратите внимание на () в конце объявления функции для вызова функции.

Вы также можете вернуть функцию с именем и вызвать функцию внутри контроллера.

Обратите внимание, что причина, по которой это происходит, заключается в том, что foo не предоставляет функцию в качестве объекта разрешения (которая неявно выполняет функцию и присваивает результат foo), скорее foo объявляется как массив, а функция просто foo[0]. Вы также можете вызвать функцию foo[0] в контроллере.

На основе ваших комментариев вы пытаетесь выполнить сервисную функцию и вернуть результат. В этом случае вы должны убедиться, что сервис доступен для модуля, а затем просто вызовите его. Нет необходимости пытаться внедрить службу в свою функцию разрешения так, как вы могли бы с объявлением контроллера.

т.е. вместо того, чтобы делать:

resolve: { 
    postPromise: ['users', function (users) {
        console.dir('here '+users);
        return users.getAll();
    }]

ты можешь сделать:

app.config([
'$interpolateProvider',
'$stateProvider',
'$urlRouterProvider',
'users',
function ($interpolateProvider, $stateProvider, $urlRouterProvider, users) {
...

resolve: { 
    allTheUsers: function (users) {
        console.dir('here '+users);
        return users.getAll();
}

http://plnkr.co/edit/FOgVgz5kvfuzPAAgtsVC?p=preview

  • 0
    Моя проблема немного сложна. Я хочу получить данные в разрешении, после того как позвоню в мой сервис с $ http. Вы можете найти код здесь pastebin.com/PDN9Arkd . моя решимость не вызывает мою службу, и внутри моего контроллера у меня нет моих данных.
  • 0
    опять же, вы возвращаете postPromise в виде массива, с 'users' качестве postPromise[0] и вашей функцией в качестве postPromise[1] . это не вызывает функцию и не предоставляет users в качестве параметра для функции (это не массив внедрения зависимостей).
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню