【问题标题】:Angular 1 - Service to detect change redux state changeAngular 1 - 检测更改 redux 状态更改的服务
【发布时间】:2017-09-09 08:16:18
【问题描述】:

我正在尝试创建一个服务来检测我的应用程序的 redux 状态的变化,以便能够重定向到不同的页面。

我得到的错误是:

Error: [$injector:unpr] Unknown provider: translate2FilterProvider <- 
translate2Filter

http://errors.angularjs.org/1.6.4/$injector/unprp0=translate2FilterProvider%20%3C-%20translate2Filter

这是我的重定向服务:

import * as angular from 'angular'
import {
    IStateService,
} from 'angular-ui-router'
import {subscribe} from 'awesomeLibrary_web_stateSubscribe'
import {getUser} from '../redux/get'
import {
    INgRedux,
    State,
} from '../redux/redux'
import {RouterParams} from '../redux/root/router/routerReducers'


export class RedirectionService {

    constructor(
        public  $ngRedux:       INgRedux,
        public  $stateParams:   RouterParams,
        public  $state:         IStateService,
        $scope:                 angular.IScope,
    ) {

        $scope.$on('$destroy', this.$ngRedux.connect(s => this._mapState(s))(this))

        $ngRedux.subscribe(async () => { await this.redirectinDetection() })

    }

    public async redirectinDetection() {

        const state = this.$ngRedux.getState()
        const user = getUser(state)

        if (this.$state.is('site.user')) {
            // Here it will redirect to user/:userId
            if (user && !this.$stateParams.userId) {
                this.$state.go('site.user', {userId: user.id})
            }
            else if (!user) {
                // not logged in
            }
        }

    }

    private _mapState = (state: State) => ({
        user: getUser(state),
    })

}

angular.module('Site')
    .service('redirectionSerivce', RedirectionService)

下面是我尝试将 redirectionService 注入的组件。它是主要的顶级组件,因为我希望此服务在整个站点上运行:

import * as es6Promise from 'es6-promise'
es6Promise.polyfill()

import * as angular from 'angular'
import 'angular-animate'
import 'angular-aria'
import 'angular-local-storage'
import 'angular-material'
import 'angular-messages'
import 'angular-ui-router'
import 'ng-redux'
import {
    INgRedux,
    State,
} from './redux/redux'
import {RouterParams} from './redux/root/router/routerReducers'
import '../../node_modules/angular-elastic/elastic'
import '../../node_modules/angular-material/angular-material.min.css'
import './cUser/cUser'
import './mConfig/persistentQueryParamsConfig'
import './mConfig/routeConfig'
import './mDirectives/mDirectives'
import './mServices/mServices'
import './redux/redux'

class SiteController {

    constructor(
        $ngRedux: INgRedux,
    ) {
        $ngRedux.connect(s => this._mapState(s))(this)
    }

    private _mapState = (state: State) => ({
        metaTitle:          'title'),
    })

}

class StatelessController {

    constructor(
        public $stateParams: RouterParams,
    ) {}

}

angular.module('Site').controller('SiteController', SiteController)
angular.module('Site').controller('StatelessController', StatelessController)
angular.module('Site').run([
    'redirectionService',
    angular.noop, // tslint:disable-line:no-unbound-method
])

【问题讨论】:

    标签: angularjs angular-services angularjs-injector


    【解决方案1】:

    您正在尝试注入一个名为 translate2Filter 的服务(可能来自您包含的这两部分代码),但找不到该服务

    检查您的 html 中是否有类似的过滤器,或查看所有项目以找到调用此过滤器的位置。

    问候

    巴勃罗·加西亚

    【讨论】:

      猜你喜欢
      • 2018-07-31
      • 2010-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-02
      • 2019-05-14
      • 2020-01-10
      • 1970-01-01
      相关资源
      最近更新 更多