【问题标题】:factory and controller dependency error工厂和控制器依赖错误
【发布时间】:2016-01-28 14:22:39
【问题描述】:

我是 Angular js 的新手。我试图在我的控制器和我的工厂之间建立依赖关系。 控制器:

var app = angular.module('app', ['ngRoute']);

    app.controller('MainViewController',['MainViewFactory', function ($scope, MainViewFactory ,$location) {

           //codes here

    }]);

这是工厂:

var app = angular.module('app');

app.factory('MainViewFactory' , function () {
    var factory = {};
    //factory codes here

    return factory;
});

但在加载页面时出现注入器错误

未捕获的错误:[$injector:nomod] 模块“app”不可用!您要么拼错了模块名称,要么忘记加载它。如果注册模块,请确保将依赖项指定为第二个参数。

<!DOCTYPE html>
<html >
<head>
    <meta charset="utf-8"/>
    <title></title>
    <link href="/public/css/bootstrap.min.css" rel="stylesheet">
    <link href="/public/css/font-awesome.min.css" rel="stylesheet"/>
    <link href="/public/css/style.css" rel="stylesheet"/>
    <link href="/public/css/style-blue1.css" rel="stylesheet" id="style_color"/>
    <link href="/public/css/jstree-themes/default/style.min.css" rel="stylesheet">
    <link href="/public/lib/toaster/toaster.css" rel="stylesheet">
</head>
<body ng-app="app" ng-controller="MainViewController" >
<div id="navbar">
    <span> </span>
</div>

<div id="container">
    <div id="tools">
        <button class="btn" ng-click="functions()"></button>
        <button class="btn" ng-click="setting()"></button>
        <button class="btn" ng-click="guide()"></button>
        <button class="btn" ng-click="contactUs()"></button>
    </div>
    <div id="content" ng-view=""> </div>
</div>
<script type="text/javascript" src="/public/lib/angular/angular.js"></script>
<script type="text/javascript" src="/public/lib/angular/angular-route.min.js"></script>
<script type="text/javascript" src="/public/lib/jquery-2.1.1.min.js"></script>
<script type="text/javascript" src="/public/app/factories/MainViewFactory.js"></script>
<script type="text/javascript" src="/public/app/controllers/MainViewController.js"></script>
</body>
</html>

帮我解决这个问题!

【问题讨论】:

  • 控制器和工厂是分开的文件吗?
  • 是的,它们是分开的@Jasen
  • 你的模块是在MainViewController.js中定义的,所以用MainViewFactory.js颠倒加载顺序。

标签: javascript angularjs


【解决方案1】:

更新:

您应该将控制器放在工厂脚本之前。

<script type="text/javascript" src="/public/app/controllers/MainViewController.js"></script>
<script type="text/javascript" src="/public/app/factories/MainViewFactory.js"></script>

您不必为工厂再次声明相同的模块,您可以这样定义,

var app = angular.module('app', ['ngRoute']);
app.controller('MainViewController',['$scope','MainViewFactory','$location', function ($scope, MainViewFactory ,$location) {

    }]);
app.factory('MainViewFactory' , function () {
    var factory = {};
    //factory codes here

    return factory;
});

这是工作的Plunker

【讨论】:

  • 如果它在同一个文件中,是的 U R 对。但问题是我有单独的控制器和工厂文件。
  • 只需像上面那样更改控制器并尝试,即使它们在不同的文件中,它应该可以工作
  • 我以前做过,这是错误应用程序未定义 @Sajeetharan
  • 发布您的 html 或创建一个 plunker/fiddle
  • 按照我放的方式更改脚本引用的顺序
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多