未捕获错误:[$ injector:modulerr]无法实例化模块myApp

时间:2017-05-22 19:49:01

标签: angularjs typescript module

  

未捕获错误:[$ injector:modulerr]无法实例化模块   myApp由于:错误:[$ injector:nomod]模块' myApp'不是   可以!您要么错误拼写了模块名称,要么忘记加载它。   如果注册模块,请确保将依赖项指定为   第二个论点。

美好的一天,在我提出这个问题之前,我查看了这个问题的所有先前的答案,并通过了文档,不幸的是,没有帮助我,这就是我要问的原因。

这就是我使用角度和控制器的方式:

html文件:

<!DOCTYPE html>
<html>

<head>
</head>

<body ng-app="myApp">

    <div ng-controller="login.controller">
        <input ng-model="foodDescription">
        <button ng-click="onSomethingChanged(foodDescription)">Do Something</button>
        <h1>The Food is {{viewModel.foodDescription}}</h1>
    </div>
    <script type='text/javascript' src="./node_modules/angular/angular.js"></script>
    <script type='text/javascript' src="./module.js"></script>
</body>

</html>

模块文件:

import angular = require('angular');

import loginControllerImport = require('./Views/login/login.Controller');

var app: angular.IModule = angular.module("myApp", []);

app.controller(loginControllerImport.name, loginControllerImport.loginController);

loginControllerImport.loginController.$inject = ['$scope'];

export = app;

控制器文件:

import angular = require('angular');
import loginViewModelImport = require('./login.viewModel');

export interface ILoginControllerScope extends angular.IScope {
    viewModel: ILoginViewModel;
    onSomethingChanged: (myFood: string) => void;
}

export class loginController {

    constructor(private $scope: ILoginControllerScope) {
        this.$scope.viewModel = new loginViewModelImport.loginViewModel();
        this.$scope.onSomethingChanged = this.onSomethingChanged.bind(this);
    }

    private onSomethingChanged(myFood: string) {
        this.$scope.viewModel.foodDescription = myFood;
    }
}

export var name: string = "login.controller";

查看模型文件:

export class loginViewModel implements ILoginViewModel {

    private _foodDescription: string;

    get foodDescription(): string {
        return this._foodDescription;
    }
    set foodDescription(value: string) {
        this._foodDescription = value;
    }
}

那么出现这个错误会出现什么问题?为什么会出现?我该怎么解决?我将来如何避免它?

非常感谢。

1 个答案:

答案 0 :(得分:0)

由于您使用require()来加载依赖项,您还应该a)将它们捆绑到一个输出文件中,b)手动加载它们或c)使用像RequireJS这样的库加载它们。我无法验证module.js是否是您的捆绑文件,否则此代码将不会成功。

如果我自己会遇到这个问题,我会将应用程序剥离到最低限度(只需加载myApp模块本身)并使其正常工作。启动此操作后,添加视图模型和控制器(提示:逐个)。