【问题标题】:Dynamically generated templateUrl using ui-router使用 ui-router 动态生成的 templateUrl
【发布时间】:2018-02-22 19:55:34
【问题描述】:

我想使用我的 ng-click id 的 id 创建动态生成的模板 url。但我收到以下错误

未捕获的错误:[$injector:modulerr] 无法实例化模块意味着 由于:TypeError:filename.indexOf 不是函数

我的路由器代码如下。

$stateProvider.state('file-petition-tab', {
  url: '/file-petition-tab/:id',
  templateUrl: function ($stateParams){
    return 'app/dashboard/views/tabs/tab' + $stateParams.id + '.html';
  },
  controller: 'DashboardController',
  controllerAs: 'vm',
  lazyModules: [
    'app/dashboard/dashboard.controller.js',
    'app/tpl/api.services.js',
  ]
})

我的锚标记代码是

<a ui-sref="file-petition-tab({id: menu.formid})"><span>{{menu.form_code}}</span>{{menu.form_desc}}</a>

而且我还想使用 id 生成动态控制器。谢谢。

【问题讨论】:

  • 未捕获错误:[$injector:modulerr] 无法实例化模块意味着由于:错误:[$injector:unpr] 未知提供者:$stateParams

标签: angularjs model-view-controller state ui-sref


【解决方案1】:

它正在使用 templateProvider 和 $stateParams、$templateRequest 工作。

$stateProvider.state('file-petition-tab', {
  url: '/:id',
  templateProvider: function ($stateParams, $templateRequest) {
    var tplURL = "app/dashboard/views/tabs/tab"+$stateParams.id+".html";
    //console.log('$stateParams', $templateRequest(tplURL));
    return $templateRequest(tplURL);
  },
  controller: 'DashboardController',
  controllerAs: 'vm',
  lazyModules: [
    'app/dashboard/views/tabs/tab1.controller.js',
    'app/dashboard/dashboard.controller.js',
    'app/tpl/api.services.js',
  ],
})

并按照以下格式使用锚点

<a ui-sref="file-petition-tab({id: menu.formid})"><span>{{menu.form_code}}</span>{{menu.form_desc}}</a>

【讨论】:

    【解决方案2】:

    在您的路由器代码中,在 url 值下删除 id 之前的斜线

    $stateProvider.state('file-petition-tab', {
    url: '/file-petition-tab:id',
    templateUrl: function ($stateParams){
       return 'app/dashboard/views/tabs/tab' + $stateParams.id + '.html';
    },
    controller: 'DashboardController',
    controllerAs: 'vm',
    lazyModules: [
      'app/dashboard/dashboard.controller.js',
      'app/tpl/api.services.js',
    ]
    })
    

    【讨论】:

      【解决方案3】:

      filename.indexOf 不是函数:此错误指向使用不存在的方法,我认为它在您的控制器中我现在无法在您的代码中找到它。

      我们什么时候可以使用 indexOf

      indexOf 与数组相关,例如在您的示例中 filename 应该是 array 以具有 indexOf

      var filename = [{title: 'A'}] //should be filesname
      
      //i want to find object with title A, i want to know it's exist or not
      var findObject = {title: 'A'};
      var indexOf = filename.indexOf(findObject);
      //indexOf return 0 if it exist else -1
      

      indexOf 不起作用时

      var filename = {} //it's object
      var filename = "" // it's string
      //it's not exist yet
      

      在这种情况下,它将返回 filename.indexOf is not a function

      所以在您的示例中,请确保您可以将其用作方法。

      【讨论】:

      • 但是这个文件名来自一个插件 fl.lazy.js。
      • 所以安慰它并弄清楚它是什么?
      • 得到那个错误..未捕获的错误:[$injector:modulerr] 无法实例化模块意味着由于:错误:[$injector:unpr] 未知的提供者:$stateParams
      • templateUrl 不支持功能,在你的情况下function($stateParams)
      • 我也使用 templateProvider: function ($timeout, $stateParams) { return $timeout(function () { return "file-petition-tab/:id :"+$stateParams.id + '. html'; }, 100);但这也给出了同样的错误
      【解决方案4】:

      您尝试过数组语法吗?

      $stateProvider
      // .... many states...
        .state('file-petition-tab', {
          url: '/file-petition-tab/:id',
          templateUrl: ['$stateParams', function ($stateParams) {
              return 'app/dashboard/views/tabs/tab' + $stateParams.id + '.html';
          }],
          controller: 'DashboardController',
          controllerAs: 'vm',
          lazyModules: [
            'app/dashboard/dashboard.controller.js',
            'app/tpl/api.services.js',
          ]
        })
      

      【讨论】:

      • 是的,我试过了,我得到了错误 Uncaught Error: [$injector:modulerr] Failed to instantiate module mean due to: Error: [$injector:unpr] Unknown provider: $stateParams
      • 能分享一下屏幕截图吗
      • 确保将 ui.router 作为依赖项包含在 var app = angular.module('myApp', ['ui.router', ...]);
      • ui-router 作为依赖项包含在内,如果我不使用 $stateParams,它就可以工作。并写 templateUrl: 'app/dashboard/views/tabs/tab1.html',
      猜你喜欢
      • 2016-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-15
      • 1970-01-01
      相关资源
      最近更新 更多