【问题标题】:Angular UI-Router works with template but not componentAngular UI-Router 适用于模板但不适用于组件
【发布时间】:2017-02-26 15:32:23
【问题描述】:

我正在尝试在 angular 1 项目中使用 angular-ui-router。我遇到的问题是,当我指定模板时,我可以让 angular-ui-router 工作,但在我指定组件时不能。

例如,这是可行的:

var groceryListRoutes = function($stateProvider) {
    var listOfGroceryLists = {
        name: 'listOfGroceryLists',
        url: '/lists',
        template: '<grocery-list-component></grocery-list-component>',
    };
    $stateProvider.state(listOfGroceryLists);
};

但是,当我尝试指定组件时,什么都没有显示,并且控制台中没有给出错误:

var groceryListRoutes = function($stateProvider) {
    var listOfGroceryLists = {
        name: 'listOfGroceryLists',
        url: '/lists',
        component: 'groceryListComponent',
    };
    $stateProvider.state(listOfGroceryLists);
};

这是我的grocery-list.module.js,它注册了组件和路由:

import angular from 'angular';
import 'angular-resource';
import uiRouter from 'angular-ui-router';

import groceryListComponent from './grocery-list.component';
import groceryListAPIService from './grocery-list.service';
import groceryListRoutes from './grocery-list.routes';

import groceryListDetailComponent from './grocery-list-detail.component';

const GroceryListModule = angular.module('groceryList', [
    // Dependencies
    'ngResource',
    'ui.router',
])
    .config(($resourceProvider) => {
        $resourceProvider.defaults.stripTrailingSlashes = false;
    })
    .factory('groceryListAPIService', groceryListAPIService)
    .component('groceryListComponent', groceryListComponent)
    .component('groceryListDetailComponent', groceryListDetailComponent)
    .config(groceryListRoutes);

export default GroceryListModule;

还有我的grocery-list.component.js

import template from './grocery-list.template.html';

import groceryListController from './grocery-list.controller';

const groceryListComponent = {
    template,
    controller: groceryListController,
    controllerAs: 'groceryListCtrl',
}

export default groceryListComponent;

还有我的packages.json

{
  "name": "shopping-list",
  "version": "1.0.0",
  "description": "An app to keep track of your grocery shopping",
  "repository": "https://github.com/thomascothran/shopping_list.git",
  "scripts": {
    "start": "gulp",
    "test": "echo \"Error: no test specified\" && exit 1",
    "eslint": "eslint"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "babel-core": "^6.17.0",
    "babel-eslint": "^7.0.0",
    "babel-loader": "^6.2.5",
    "babel-preset-es2015": "^6.16.0",
    "eslint": "^3.7.1",
    "eslint-config-airbnb": "^12.0.0",
    "eslint-plugin-import": "^1.16.0",
    "eslint-plugin-jsx-a11y": "^2.2.2",
    "eslint-plugin-react": "^6.3.0",
    "gulp": "^3.9.1",
    "raw-loader": "^0.5.1",
    "webpack": "^1.13.2",
    "webpack-stream": "^3.2.0"
  },
  "dependencies": {
    "angular": "^1.5.8",
    "angular-resource": "^1.5.8",
    "angular-ui-router": "^0.3.1",
    "js-cookie": "^2.1.3",
    "ramda": "^0.22.1"
  }
}

【问题讨论】:

  • 您好像有错字?保存配置文件的变量与您传递给 stateprovider 的变量不匹配:listOfGroceryLists =/= gorceryListDetail
  • @Eric -- 抱歉,我已经在上面的问题中更正了它。我在该文件中有许多路由,当我减少堆栈溢出的问题时,我删除了错误的行。根据下面 Mahesh 的回答,我认为问题出在我拥有的 angular-ui-router 版本上。

标签: javascript angularjs angular-ui-router angular-components


【解决方案1】:

参考这个问题: Angular - UI.Router not loading component

看起来您正在使用 package.json 中的 0.3.x,这是行不通的。请升级到 1.0.0 并尝试。

组件属性可从 ui-router@1.0.0 获得(参见 hereCHANGELOG.MD - 它是在 1.0.0-aplpha 中添加的)所以它在 0.3.1 中不可用

【讨论】:

  • 就是这样。我已经阅读了几个小时的文档,并没有注意到对组件的支持仅在 beta 版本中。我更新了packages.json 以获取 v.1.0 测试版,并且成功了。谢谢@Mahesh,这为我节省了很多时间。
猜你喜欢
  • 2017-04-22
  • 2017-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-12
  • 2018-02-22
  • 1970-01-01
  • 2021-05-07
相关资源
最近更新 更多