2014-11-05 39 views
1

我新的角度JS,我想一些例子...但我得到一个非常奇怪的异常,当我尝试加载我的应用程序...角JS异常触发的错误,即使控制器可用

这里我的角JS代码:

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.5/angular.min.js"></script> 
     <script src="JS/Controllers.js"></script> 
    <body ng-app="myapp"> 
      <div ng-controller="HelloController"> 
       <h2>Hello {{helloTo.title}} !</h2> 
      </div> 
      <div ng-controller="MyController" > 
       <span ng-show="myData.showIt"></span> 
       <span ng-hide="myData.showIt"></span> 
      </div> 
     </body> 

这是我的控制器代码:

angular.module("myapp", []).controller("HelloController", function($scope) { 
    $scope.helloTo = {}; 
    $scope.helloTo.title = "Test"; 
}); 

angular.module("myapp1", []).controller("MyController", function($scope) { 
    $scope.myData = {}; 
    $scope.myData.showIt = true; 
}); 

错误由萤火虫记录: 错误:[NG:AREQ] http://errors.angularjs.org/1.2.5/ng/areq?p0=MyController&p1=not%20a%20function%2C%20got%20undefined https://ajax.googleapis.com/ajax/libs/angularjs/1.2.5/angular.min.js 线83

我采用了棱角分明的js 1.2.5版本...

+1

你有两个,在这里完全不同的模块。一个叫myapp,一个叫myapp2。这就是为什么无法找到MyController的原因。 – 2014-11-05 09:00:08

回答

2

你正在创建两个不同的角度模块,与每一个控制器内的myapp2模块,而不是一个具有两个不同的控制器单独的模块,这是你想要做的,只是改变你的代码来匹配这个语法:

angular.module("myapp", []) 
    .controller("HelloController", function($scope) { 
     // ... 
    }) 
    .controller("MyController", function($scope) { 
     // ... 
    }); 

或者这一个:

var myApp = angular.module("myapp", []); 

myApp.controller("HelloController", function($scope) { 
    // ... 
}); 

myApp.controller("MyController", function($scope) { 
    // ... 
}); 
1

这里有2个问题。

一,您是否定义了2个不同的模块:“myapp”和“myapp1”。也许这只是一个错字,你的意思是他们是一样的。

然后,第二个问题是,你重新定义你的模块当您使用[]第二次:

angular.module("myapp", []) 

这是一个模块二传手

相反,使用模块吸气没有[]

angular.module("myapp").controller("MyController", ...) 
1

下面将工作。你必须记住的是,如果你定义了一个新的angular.module,如果你输入angular.module('myapp', []),你正在定义一个不知道任何其他模块的新空间。如果您然后执行angular.module('myapp').controller()将控制器连接到原始模块。因此正在其范围内。

注意定义控制器时忽略[][]用于依赖注入,但是在angular.module中定义了一个全新的模块空间。

以下是实际正确模块化角度js的一种方法。

angular.module("myapp.hello", []).controller("HelloController", function($scope) { 
    $scope.helloTo = {}; 
    $scope.helloTo.title = "Test"; 
}); 

angular.module("myapp.my", []).controller("MyController", function($scope) { 
    $scope.myData = {}; 
    $scope.myData.showIt = true; 
}); 

angular.module("myapp", [ 
    'myapp.hello', 
    'myapp.my']); 
+0

谢谢你们,这对我来说绝对有效...... – 2014-11-05 09:14:27

+0

把它标记为接受,如果是这样的话:)谢谢 – 2014-11-12 11:30:37

2

你有两个模块myapp和myapp2。 myapp2有一个控制器MyController,你试图在myapp模块的范围内使用,这是不可能的。

您可以在myapp模块中定义MyController。http://jsfiddle.net/g35tpy5q/1/

var myapp=angular.module("myapp", []); 
myapp.controller("HelloController", function($scope) { 
    $scope.helloTo = {}; 
    $scope.helloTo.title = "Test"; 
}); 

myapp.controller("MyController", function($scope) { 
    $scope.myData = {}; 
    $scope.myData.showIt = true; 
}); 

或注入的myapp模块http://jsfiddle.net/g35tpy5q/2/

angular.module("myapp2", []).controller("MyController", function($scope) { 
    $scope.myData = {}; 
    $scope.myData.showIt = true; 
}); 
angular.module("myapp", ["myapp2"]).controller("HelloController", function($scope) { 
    $scope.helloTo = {}; 
    $scope.helloTo.title = "Test"; 
});