ES6 Uncaught TypeError:xxx不是函数

时间:2016-03-31 09:39:56

标签: angularjs ecmascript-6

我有一个模块入口点init.js,如下所示,

import $ from 'platform!jquery';
import angular from 'platform!angular';
import ngRoute from 'platform!angular-route';
import kendo from 'platform!kendo-ui';
import DemoModuleMain from './scripts/app.min';

export function render(containerElement, startingRoute, platform) 
{
$.ajax({
    url: platform.proxyUrl('/content/Default.aspx'),
    success: function (template) {
        containerElement.innerHTML = template;
        DemoModuleMain.main(platform);
        angular.bootstrap(containerElement, ['myApp']);
    },
    error: function (a, b, error) {
        containerElement.innerHTML = "Error: " + error;
    }
})
}

然后是app.min.js文件

import UserService from './services/UserService';
import UserController from './controllers/UserController';
import {UpperFilter, LowerFilter} from './filters/TextFilters';
import ClientInformation from './directives/ClientInfo';
import ocLazyLoad from '../libs/ocLazyLoad.min.js';

class DemoModuleMain
{
 constructor(){
    alert('init');
 }

 main(platform){
    this._platform = platform;
    var mainApp = angular.module('myApp', ['ngRoute','oc.lazyLoad']);
    mainApp.controller('UserController', UserController)
                 .service('UserService', UserService)
                 .filter('upper', UpperFilter)
                 .filter('lower', LowerFilter)
                 .directive('clientInfo', ClientInformation);

    mainApp.paths = {
        baseurl: 'extModReq/ngmod/',
        apiurl:'extModReq/ngmod/content/Default.aspx'
    };

    mainApp.constant('BASE_URL', mainApp.paths.baseurl);
    mainApp.constant('API_URL', mainApp.paths.apiurl);

    mainApp.config(function ($routeProvider, BASE_URL) {
        $routeProvider
                .when('/Client/:param', {
                    templateUrl: BASE_URL+'content/Client.html'
                })          
                .otherwise({
                    redirectTo: '/'
                });
    });
  }
}

export default DemoModuleMain;

我在DemoModuleMain.main(平台)收到错误“Uncaught TypeError:DemoModuleMain.main不是函数”;可能是什么问题?

3 个答案:

答案 0 :(得分:0)

如果您正在呼叫DemoModuleMain.main(),则main需要是静态方法。试试这个

class DemoModuleMain {

  constructor() {
    alert('init');
  }

  static main(platform) { }

}

但是,在这种情况下,您无法在其中使用this(因为没有实例)。因此,您应该实例化DemoModuleMain实例,然后调用其main方法:

var demo = new DemoModuleMain()
demo.main(platform)

答案 1 :(得分:0)

如果您想使用main方法,那么您需要实例化您的课程。

const demo = new DemoModuleMain();
demo.main(platform);

或者直接导出方法。

export function main(platform){
  // ...
}

然后将其与命名导入一起使用。

import { main } from './scripts/app.min';
main(platform);

答案 2 :(得分:0)

您正在调用类本身的main方法,就好像它是静态的一样。您需要实例化您的类,或将static关键字添加到方法中。但这两种选择都没有用。你根本不应该使用class。只需导出一个函数,就像在init模块中一样:

…
export function main(platform) {
    var mainApp = angular.module('myApp', ['ngRoute','oc.lazyLoad']);
    …
}

…
import * as DemoModuleMain from './scripts/app.min';
…
DemoModuleMain.main(platform);