【问题标题】:Error when injecting a service or factory in config block在配置块中注入服务或工厂时出错
【发布时间】:2017-06-24 13:57:05
【问题描述】:

我正在尝试使用 Angular 1.6 创建博客,除了我创建服务并注入配置文件时,一切正常。测试指令工作正常,仅在注入 myService 服务/工厂时中断。

app.coffee

app = angular.module 'dts',['ngRoute']

app.service 'myService', ->
    this.asd = ""

app.directive 'ngHello', ->
    return {
        restrict:'E'
        replace: true
        template: "<h1>Hola mundo</h1>"
        link: (scope,element,attrs)->

    }

config.coffee

app = angular.module 'dts'

app.config ["$locationProvider","$routeProvider","myService", ($locationProvider,$routeProvider,myService)->

    $routeProvider

        .when "/",
            controller: "mainCtrl"
            templateUrl: "/app/views/index.html"

        .when "/blog",
            controller: "blogCtrl"
            templateUrl: "/app/views/blog/index.html"

        .when "/blog/post/:id",
            controller: "blogCtrl"
            templateUrl: "/app/views/blog/single.html"

        .when "/contact",
            controller: "contactCtrl"
            templateUrl: "/app/views/contact.html"

        .otherwise '/'



    $locationProvider.html5Mode
        enabled: true
        requireBase: false
]

脚本包括

script(src="/js/libs/angular.min.js")
script(src="/app/modules/angular-route.min.js")
script(src="/app/app.js")
script(src="/app/services/slugs.js")
script(src="/app/config.js")
script(src="/app/controllers/main.js")
script(src="/app/controllers/blog.js")

我做错了什么?

我在 1.6 版本上搜索了有关问题或弃用服务或工厂的信息,但我什么也找不到。我将 angular 降级到 1.5.6 也不起作用。

我试图将服务/工厂移动到应用程序文件,但也中断了(在我在 services.js 上创建它之前)

【问题讨论】:

  • 你为什么要在配置中注入服务?
  • 我想制作路线。我在数据库中有一个路由列表来创建类似的 slug:blog/post/1 -> blog/post/lorem-ipsum-dolor 最好的方法是什么?
  • 这个不是很清楚也不是很具体
  • 我在 db 上有一个帖子 slugs 数组,当前查看帖子的 url 是 /blog/post/1 并且我想使用 /blog/post/name-of-post 而没有传递名称作为参数。在 laravel 或 codeigniter 中,我创建数据库路由并在路由上使用 foreach。我正在尝试对角度路由做同样的事情:[1] /blog/post/1 /blog/post/lorem-ipsum [2] /blog/post/2 /blog/post/lalalala 等
  • 使用路由resolve并在其中注入服务

标签: javascript angularjs


【解决方案1】:

你必须在配置中注入myServiceProvider,你不能在配置函数中注入服务

【讨论】:

  • 谢谢,在过去的一些例子中,我使用了服务的名称并且效果很好,但我从未尝试在配置中使用,谢谢!
【解决方案2】:

来自文档:

模块加载和依赖

  • 配置块 - 在提供者注册和配置阶段执行。 只能将提供程序和常量注入配置块。这是为了防止在完全配置之前意外实例化服务。

— AngularJS Developer Guide - Modules (Loading & Dependencies)

服务不能创建或更改路由表。

另一方面,服务可注入到路由表的解析函数中,因为这些函数是在应用程序的运行阶段调用的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 2021-07-24
    • 1970-01-01
    相关资源
    最近更新 更多