Я новичок в 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="/bootstrap.min.css" rel="stylesheet">
<script src="/angular.min.js"></script>
<script type="text/javascript" src="/angular-route.min.js"></script>
<script src="/angular-ui-router.js"></script>
<script src="/angularApp.js"></script>
Но когда я получаю маршрут/(индекс), у меня нет console.log('inside'), но у меня есть только console.log("здесь");
Я пробовал также http://localhost:3000/#/
, но моя проблема сохраняется.
Поставщик 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();
}
postPromise
в виде массива, с'users'
качествеpostPromise[0]
и вашей функцией в качествеpostPromise[1]
. это не вызывает функцию и не предоставляетusers
в качестве параметра для функции (это не массив внедрения зависимостей).