Angular module only works with inline javascript
我正在学习 Angular,并且仅当所有代码都内联在页面上时,才能将控制器添加到我的模块中。如果我用
"Error: [$injector:unpr]
http://errors.angularjs.org/1.3.11/$injector/unpr?p0=aProvider%20%3C-%20a%20%3C-%20personController
1 2 3 4 5 6 7 8 9 | var app = angular.module('app', []) .config([function(injectables){ console.log('configuring app'); }]).run([function(injectables){ console.log('running app'); }]).controller("personController", function($scope){ $scope.firstName ="John"; $scope.lastName ="Doe"; }); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | <!DOCTYPE html> <html ng-app="app"> <head> <meta charset="UTF-8"> <link rel="stylesheet" href="web/stylesheets/app.css"/> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.11/angular.min.js"> <!-- wont work if I include it this way --> <script src="web/js/app.min.js"> <!-- but works if I put it in here --> </head> <body> <label>Name:</label> <input type="text" ng-model="yourName" placeholder="Enter a name here"><hr /> Hello {{ yourName }}! <p>The name is <span ng-bind="firstName"></span></p> <p>My first expression: {{ 5 + 5 }}</p> First Name: <input type="text" ng-model="firstName"> Last Name: <input type="text" ng-model="lastName"> Full Name: {{firstName +"" + lastName}} <div ng-init="names=[ {name:'Jani',country:'Norway'}, {name:'Hege',country:'Sweden'}, {name:'Kai',country:'Denmark'}]"> <ul> <li ng-repeat="x in names"> {{ x.name + ', ' + x.country }} </li> </ul> <button ng-click="count = count + 1">Click me!</button> <p>{{ count }}</p> </body> </html> |
正如 Claies 在评论中提到的,错误消息看起来像是在尝试为依赖项"a"寻找提供者,这可能是缩小的结果。
如果你喜欢:
1 | angular.module(..).controller("SomeCtrl", function($scope){}); |
它可能会将
1 | angular.module(..).controller("SomeCtrl", ["$scope", function($scope){}]); |
因为字符串不会被缩小,Angular 会知道哪个依赖是哪个。当然,另一种方法是使用 $injector,正如 Claies 也提到的那样。