首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使AoT兼容DI

使AoT兼容DI
EN

Stack Overflow用户
提问于 2016-10-09 20:44:10
回答 1查看 815关注 0票数 0

我有一个使用角rc4的工作项目,它在更新到角2.0.0之后就崩溃了。

我有以下错误:

静态解析符号值时出错。调用函数'createStore',不支持函数调用。考虑将函数或lambda替换为导出函数的引用,解析符号appStore。

对于不再起作用的代码:

代码语言:javascript
复制
//Redux - ReduxThunk - rootReducer
import { Store, createStore, applyMiddleware } from 'redux';
import ReduxThunk  from 'redux-thunk';
import { rootReducer } from '../modules/rootReducer';

const appStore = createStore(
  rootReducer,
  applyMiddleware(ReduxThunk)
)

@NgModule({
...
  providers: [
    { provide: 'AppStore', useValue: appStore }
  ]
})

解决这个问题的最好方法是什么?

这是我在app.ts中的根组件有角rc4的文件。

代码语言:javascript
复制
import { Component, provide } from '@angular/core';
import { Platform, ionicBootstrap } from 'ionic-angular';
import { StatusBar } from 'ionic-native';

//For Navigation
import { TabsPage } from './pages/tabs/tabs';

//Redux
import { createStore, applyMiddleware } from 'redux';
import ReduxThunk  from 'redux-thunk';
import rootReducer from './modules/rootReducer';

const appStore = createStore(
  rootReducer,
  applyMiddleware(ReduxThunk)
);

@Component({
  template: `<ion-nav [root]="tabsPage"></ion-nav>`
})

export class MyApp {

    private tabsPage: any;

    constructor(
        private platform:Platform, 
        @Inject('AppStore') private appStore: any
        ) {
        });

        this.tabsPage = TabsPage;

        platform.ready().then(() => {
            // Okay, so the platform is ready and our plugins are available.
            // Here you can do any higher level native things you might need.
            StatusBar.styleDefault();
        });
    }   
}

ionicBootstrap(MyApp, [
    provide('AppStore', { useValue: appStore })
])
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-10 13:03:55

如果在createStore函数中的任何地方都使用未命名/未导出的函数,您将得到同样的错误--这很可能是这样的。我想你有两个选择:

1.尝试修改代码,希望问题在代码中。

我会像@estus推荐的那样尝试useFactory,但是您必须使用一个命名函数,而不是匿名函数。它必须是一个函数引用,而不是指向一个函数的const。

代码语言:javascript
复制
export function appStore() {
  return createStore(
    rootReducer,
    applyMiddleware(ReduxThunk)
  );
}

@NgModule({
...
  providers: [
    { provide: 'AppStore', useFactory: appStore }
  ]
})

2.尝试使用更适合于角2的redux实现。

我正在使用ngrx,它运行得很好。NG2-剩余是另一种选择,但我还没有尝试过。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39948342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档