我有一个模块入口点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不是函数”;可能是什么问题?
答案 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);