【问题标题】:AngularJS ui-router : Could not resolve___ from state ___ ErrorAngularJS ui-router:无法从状态___错误解析___
【发布时间】:2014-07-30 15:50:59
【问题描述】:

我正在关注今年的 ui-router 教程 http://txt.fliglio.com/2013/05/angularjs-state-management-with-ui-router/,但出现以下错误:

Error: Could not resolve 'settings/quotes' from state 'settings'

我正在将此教程应用程序安装到我的 Express.JS 设置中,并且我正在使用 Jade 作为我的模板。

所有 Jade 模板似乎都可以正确呈现,但我注意到没有为 User Quotes (settings/quotes URL) ui-sref 链接创建 href。也许那里有一个线索。您可以在下面的屏幕截图中看到这一点:

我将在下面发布所有关键文件。


AngularJS 文件

app.js

'use strict';

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

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

      $urlRouterProvider.otherwise('/');

            var settings = {
                name: 'settings',
                url: '/settings',
                abstract: true,
                templateUrl: '/partials/settings',
                controller: 'SettingsController'
            };

            var details = {
                name: 'settings.details',
                parent: settings,
                url: '',
                templateUrl: '/partials/settings-details'
            };

            var quotes = {
                name: 'settings.quotes',
                parent: settings,
                url: '/quotes',
                templateUrl: '/partials/settings-quotes'
            };

            $stateProvider
                .state(settings)
                .state(details)
                .state(quotes);
}])
.controller('SettingsController', ['$scope', function($scope) {
    $scope.user = {
        name: "Bob Loblaw",
        email: "boblaw.bob@loblaw.org",
        password: "semi secret",
        quotes: "I am making it happen now!"
    };
}]);

翡翠模板

layout.jade

doctype html 
html
    include head
    body(ng-app='app')
        p From the layout.jade file
        <div ui-view></div>
        include scripts

settings.jade

ul
    li Settings
    li 
        a(ui-sref="settings") User Details
    li 
        a(ui-sref="settings/quotes") User Quotes
    div(ui-view="")

settings-details.jade

h3 {{user.name}}\'s Quotes
hr
div
    label Quotes
        textarea(type="text", ng-model="user.quotes")
button(ng-click="done()") Save

settings-quotes.jade

h3 {{user.name}}\'s Details
hr
div
    label Name
        input(type="text", ng-model="user.name")
div
    label Email
        input(type="text", ng-model="user.email")
button(ng-click="done()") Save

ExpressJS 服务器

server.js

var express = require('express'),
mongoose = require('mongoose'),
morgan = require('morgan'),
bodyParser = require('body-parser'),
path = require('path');

var env = process.env.NODE_ENV = process.env.NODE_ENV || '发展';

var app = express();

// configuration
app.set('views', path.join(__dirname, '/app/views'));
app.set('view engine', 'jade');
app.use(morgan('dev')); // logs every request to console
app.use(bodyParser()); // pull information from html in POST
app.use(express.static(__dirname + '/public'));

// connect to mongodb via mongoose
if(env === 'development') {
  mongoose.connect('mongodb://localhost/3lf');
} else {
  mongoose.connect('mongodb://maxmythic:mongolab3lf@ds033307.mongolab.com:33307/3lf');
}

var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error ...'));
db.once('open', function(callback) {
  console.log('3lf db is open for business ...');
});

// create mongoose schema and retrieve data
var messageSchema = mongoose.Schema({message: String});
var Message = mongoose.model('Message', messageSchema);
var mongoMessage;
Message.findOne().exec(function(err, messageDoc){
  mongoMessage = messageDoc.message;
});

// define routes
// make sure to coordinate client side and server side routes
app.get('/partials/:partialPath', function(req, res) {
  res.render('partials/' + req.params.partialPath); 
});

app.get('*', function(req, res) {
  res.render('index', {
    mongoMessage: mongoMessage
  });
});


var port = process.env.PORT || 3030;
app.listen(port);
console.log('Listening on port ' + port + '...');

【问题讨论】:

  • 哇,这是 MongoLAB 的真实密码吗? :)
  • 出色地使用被逮捕的发展

标签: angularjs pug angular-ui-router mean-stack


【解决方案1】:

你快到了,ui-router 需要这个:

<a ui-sref="settings.details">...

这表示ui-sref 导航到名为'settings.details' 的状态,以防我们需要传递参数,它与$state.go 非常相似...

<a ui-sref="settings.details({param1:value1, param2:value2})">...

如果我们想使用为状态定义的url,我们仍然可以,但我们必须使用href

<a href="#/settings">...to get to details
<a href="#/settings/quotes">...to get to quotes

如果子 url 像我们的例子一样是空字符串

     var settings = {
            name: 'settings',
            url: '/settings',
            abstract: true,
            ...
        };

     var details = {
            name: 'settings.details',
            parent: settings,
            url: '',
            ...
        };
     var quotes = {
            name: 'settings.quotes',
            parent: settings,
            url: '/quotes',
            ...
        };

查看文档:

ui-sref

new doc(引用)

ui-sref='stateName' - 导航到状态,无参数。 'stateName' 可以是任何有效的绝对或相对状态,遵循与 $state.go() 相同的语法规则

【讨论】:

  • 谢谢拉迪姆。使用点符号状态名称 settings.detailssettings.quotes 为我工作:)
  • 很高兴看到这一点);享受ui-router,非常棒的工具;)
  • 我遇到了同样的问题。你会认为他们会在入门页面上提到这样一个基本的东西!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-19
  • 2015-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-28
相关资源
最近更新 更多