控制器无法识别
Controller is not recognizing
我在 script.js 中定义了一个名为 HelloController 的控制器,它在我添加 ngRoute 并进行路由之前工作。显示的错误是
Error: [$controller:ctrlreg]
http://errors.angularjs.org/1.6.9/$controller/ctrlreg?p0=HelloController
我已经检查了有关此错误的文档,但我无法了解代码的实际问题所在。以下是代码
script.js
// Code goes herE
(function(){
angular.module('myapp',[])
.controller(['$scope','$http',
function HelloController($scope,$http){
$scope.helloTo = "angular";
$scope.hide = true;
$scope.search = (NameToSearch)=>{
$http.get("https://api.github.com/users/"+NameToSearch).then((response)=>{
console.log(response);
$scope.data=response.data;
console.log($scope.data.repos_url);
$http.get($scope.data.repos_url).then((resp)=>{
//console.log(resp);
$scope.repos=resp.data;
if(resp.data){
console.log("hide scope")
$scope.hide=false;
}
console.log(resp);
}).then(()=>{
if($scope.repos){
$scope.hide= false;
}
})
});
}
}
]);
})();
configuaration.js
angular.module('myapp',['ngRoute'])
.config(['$routeProvider',function configu($routeProvider) {
// $urlRouterProvider.otherwise("/view1");
console.log("HERE")
$routeProvider.when('/',{
templateUrl:'view1.html',
controller:"HelloController"
});
}
]);
索引文件头如下
<head>
<link rel="stylesheet"
href="bower_components/bootstrap/dist/css/bootstrap.css">
<script src =
"https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js">
</script>
<link rel = "stylesheet"
href =
"https://ajax.googleapis.com/ajax/libs/angular_material/1.0.0/angular-
material.min.css">
<script src =
"https://ajax.googleapis.com/ajax/libs/angular_material/1.0.0/angular-
material.min.js"></script>
<!-- <script src="bower_components/angular-ui-router/release/angular-
ui-router.min.js"></script> -->
<script
src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.9/angular-
route.min.js.map"></script>
<script
src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular-
route.js">
</script>
<script src="script.js"></script>
<script src="configuration.js"></script>
</head>
如果有人能提供帮助就太好了,因为我是 angular
的新手
错误http://errors.angularjs.org/1.6.9/$controller/ctrlreg?p0=HelloController
是因为您index.html中加载文件的顺序不正确。我会在我的完整解释中提到这一点...
有很多事情我必须要做。有些东西是工作所必需的,另一个是我个人的建议。关注:
需要的东西:
您必须在 index.html 中使用 ng-app
来定义呈现 $scope 内容的位置。您的代码没有此标记;
要使用 'ngRoute',您必须在 index.html 中添加元素 ng-view
。是在什么时候渲染您在路线中定义的 'templateUrl' 。根据您更改 uri,ng-route 将在其中呈现模板。通常是把它放在你体内的 div 标签内。 i.g.: <div ng-view></div>
;
- 当你要声明一个控制器时,你必须调用
angular.module('app')
,但是这个调用不能等于对我们的 configuration.js 的主调用(angular.module('app', ['ngRoute']);
).在 'app' 之后不要使用块引号,因为这表示您正在再次声明该应用程序;
要使用 'ngRoute',您必须使用 <base href="/"/>
。此标记将定义您如何为路由设置初始 URI 值。通常这个值定义为 href
匹配第一个路由; https://docs.angularjs.org/error/$location/nobase
在您的 index.html 中,您首先加载 script.js,其中定义了控制器,在您加载 configuration.js 之后,其中声明了 ng -应用程序。 AngularApp 中的主文件。加载这个资源需要注意加载的顺序。随着时间的推移,您第一眼就能认出这一点,但暂时保存此命令以在 index.html;
中加载资源
1° - 依赖项(angular、angular-路由、jQuery 等);
2° - 定义 angular.module('myApp',[])
的文件。在你的例子中,configuration.js;
3° - 控制器、服务、配置、过滤器、模块等;
- 您的配置中存在语法错误:
configu(function()...
;
对您的应用的推荐AngularJS:
- 使用 index.html 中的注释定义每个文件的加载区域。示例:
<!-- Dependencies files -->
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angular_material/1.0.0/angular-material.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular-route.js"></script>
``
<!-- App, Routes-->
<script src="configuration.js"></script>
<script src="script.js"></script>
<!-- Controllers -->
<script src="example.controller.js"></script>
<!-- Services -->
<script src="example.services.js"></script>
- 我更喜欢在其他文件中声明我的路由,但这在声明为 app.main;
的同一个文件中是可能的
- 不要使用嵌套代码声明控制器、服务、路由等。例如在你的 configuration.js:
使用var app = angular.module("myapp");
app.$inject = ['$scope', '$http']
;
app.controller('HelloController', function HelloController(...
代替
angular.module('myapp', ['$scope', '$http']).controller(...'
;
使用服务进行请求。 angular 有服务。建议在此组件中使用 $http https://docs.angularjs.org/api/ng/service;
这是一个很有魅力的实施工作 :D :
index.html
`
<html ng-app="myapp">
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angular_material/1.0.0/angular-material.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular-route.js"></script>
<script src="configuration.js"></script>
<script src="script.js"></script>
</head>
<body>
<base href="/" />
<div ng-view></div>
</body>
</html>
`
configuration.js
angular.module('myapp', ['ngRoute'])
.config(function ($routeProvider, $locationProvider) {
$locationProvider.html5Mode(true);
$routeProvider
.when('/', {
templateUrl: '/view1.html',
controller: 'HelloController'
})
.otherwise({ redirectTo: '/' });
});
script.js
(function () {
var app = angular.module('myapp');
app.$inject = ['$scope', '$http'];
app.controller('HelloController', function HelloController($scope, $http) {
$scope.helloTo = "angular";
$scope.hide = true;
$scope.search = (NameToSearch) => {
$http.get("https://api.github.com/users/" + NameToSearch).then((response) => {
console.log(response);
$scope.data = response.data;
console.log($scope.data.repos_url);
$http.get($scope.data.repos_url).then((resp) => {
//console.log(resp);
$scope.repos = resp.data;
if (resp.data) {
console.log("hide scope")
$scope.hide = false;
}
console.log(resp);
}).then(() => {
if ($scope.repos) {
$scope.hide = false;
}
})
});
};
});
})();
在你的 script.js 中定义一次 angular 模块 app
然后在任何脚本文件中只需在该模块上注册控制器 app.contoller
.
这是一个有效的 Plunker:
我在 script.js 中定义了一个名为 HelloController 的控制器,它在我添加 ngRoute 并进行路由之前工作。显示的错误是
Error: [$controller:ctrlreg] http://errors.angularjs.org/1.6.9/$controller/ctrlreg?p0=HelloController
我已经检查了有关此错误的文档,但我无法了解代码的实际问题所在。以下是代码
script.js
// Code goes herE
(function(){
angular.module('myapp',[])
.controller(['$scope','$http',
function HelloController($scope,$http){
$scope.helloTo = "angular";
$scope.hide = true;
$scope.search = (NameToSearch)=>{
$http.get("https://api.github.com/users/"+NameToSearch).then((response)=>{
console.log(response);
$scope.data=response.data;
console.log($scope.data.repos_url);
$http.get($scope.data.repos_url).then((resp)=>{
//console.log(resp);
$scope.repos=resp.data;
if(resp.data){
console.log("hide scope")
$scope.hide=false;
}
console.log(resp);
}).then(()=>{
if($scope.repos){
$scope.hide= false;
}
})
});
}
}
]);
})();
configuaration.js
angular.module('myapp',['ngRoute'])
.config(['$routeProvider',function configu($routeProvider) {
// $urlRouterProvider.otherwise("/view1");
console.log("HERE")
$routeProvider.when('/',{
templateUrl:'view1.html',
controller:"HelloController"
});
}
]);
索引文件头如下
<head>
<link rel="stylesheet"
href="bower_components/bootstrap/dist/css/bootstrap.css">
<script src =
"https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js">
</script>
<link rel = "stylesheet"
href =
"https://ajax.googleapis.com/ajax/libs/angular_material/1.0.0/angular-
material.min.css">
<script src =
"https://ajax.googleapis.com/ajax/libs/angular_material/1.0.0/angular-
material.min.js"></script>
<!-- <script src="bower_components/angular-ui-router/release/angular-
ui-router.min.js"></script> -->
<script
src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.9/angular-
route.min.js.map"></script>
<script
src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular-
route.js">
</script>
<script src="script.js"></script>
<script src="configuration.js"></script>
</head>
如果有人能提供帮助就太好了,因为我是 angular
的新手错误http://errors.angularjs.org/1.6.9/$controller/ctrlreg?p0=HelloController
是因为您index.html中加载文件的顺序不正确。我会在我的完整解释中提到这一点...
有很多事情我必须要做。有些东西是工作所必需的,另一个是我个人的建议。关注:
需要的东西:
您必须在 index.html 中使用
ng-app
来定义呈现 $scope 内容的位置。您的代码没有此标记;要使用 'ngRoute',您必须在 index.html 中添加元素
ng-view
。是在什么时候渲染您在路线中定义的 'templateUrl' 。根据您更改 uri,ng-route 将在其中呈现模板。通常是把它放在你体内的 div 标签内。 i.g.:<div ng-view></div>
;- 当你要声明一个控制器时,你必须调用
angular.module('app')
,但是这个调用不能等于对我们的 configuration.js 的主调用(angular.module('app', ['ngRoute']);
).在 'app' 之后不要使用块引号,因为这表示您正在再次声明该应用程序; 要使用 'ngRoute',您必须使用
<base href="/"/>
。此标记将定义您如何为路由设置初始 URI 值。通常这个值定义为href
匹配第一个路由; https://docs.angularjs.org/error/$location/nobase在您的 index.html 中,您首先加载 script.js,其中定义了控制器,在您加载 configuration.js 之后,其中声明了 ng -应用程序。 AngularApp 中的主文件。加载这个资源需要注意加载的顺序。随着时间的推移,您第一眼就能认出这一点,但暂时保存此命令以在 index.html;
中加载资源
1° - 依赖项(angular、angular-路由、jQuery 等);
2° - 定义 angular.module('myApp',[])
的文件。在你的例子中,configuration.js;
3° - 控制器、服务、配置、过滤器、模块等;
- 您的配置中存在语法错误:
configu(function()...
;
对您的应用的推荐AngularJS:
- 使用 index.html 中的注释定义每个文件的加载区域。示例:
<!-- Dependencies files -->
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angular_material/1.0.0/angular-material.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular-route.js"></script>
``<!-- App, Routes-->
<script src="configuration.js"></script>
<script src="script.js"></script>
<!-- Controllers -->
<script src="example.controller.js"></script>
<!-- Services -->
<script src="example.services.js"></script>
- 我更喜欢在其他文件中声明我的路由,但这在声明为 app.main; 的同一个文件中是可能的
- 不要使用嵌套代码声明控制器、服务、路由等。例如在你的 configuration.js:
使用
var app = angular.module("myapp");
app.$inject = ['$scope', '$http']
;app.controller('HelloController', function HelloController(...
代替angular.module('myapp', ['$scope', '$http']).controller(...'
;使用服务进行请求。 angular 有服务。建议在此组件中使用 $http https://docs.angularjs.org/api/ng/service;
这是一个很有魅力的实施工作 :D : index.html
`
<html ng-app="myapp">
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angular_material/1.0.0/angular-material.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular-route.js"></script>
<script src="configuration.js"></script>
<script src="script.js"></script>
</head>
<body>
<base href="/" />
<div ng-view></div>
</body>
</html>
`
configuration.js
angular.module('myapp', ['ngRoute'])
.config(function ($routeProvider, $locationProvider) {
$locationProvider.html5Mode(true);
$routeProvider
.when('/', {
templateUrl: '/view1.html',
controller: 'HelloController'
})
.otherwise({ redirectTo: '/' });
});
script.js
(function () {
var app = angular.module('myapp');
app.$inject = ['$scope', '$http'];
app.controller('HelloController', function HelloController($scope, $http) {
$scope.helloTo = "angular";
$scope.hide = true;
$scope.search = (NameToSearch) => {
$http.get("https://api.github.com/users/" + NameToSearch).then((response) => {
console.log(response);
$scope.data = response.data;
console.log($scope.data.repos_url);
$http.get($scope.data.repos_url).then((resp) => {
//console.log(resp);
$scope.repos = resp.data;
if (resp.data) {
console.log("hide scope")
$scope.hide = false;
}
console.log(resp);
}).then(() => {
if ($scope.repos) {
$scope.hide = false;
}
})
});
};
});
})();
在你的 script.js 中定义一次 angular 模块 app
然后在任何脚本文件中只需在该模块上注册控制器 app.contoller
.
这是一个有效的 Plunker: