$rootScope 未在简单的 AngularJs 路由示例中呈现
$rootScope not rendered in a simple AngularJs Routing Example
我正在尝试通过 $scope 和 $rootScope 访问姓名和年龄,但即使我觉得我做的都是正确的,也会出现错误。有人可以帮我找出错误在哪里吗?
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.5/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.5/angular-route.min.js"></script>
</head>
<body ng-app="myApp" ng-controller="myCtrl">
<a href="#/one">One</a><a href="#/two">Two</a>
<ng-view></ng-view>
<script>
//app declaration
var app = angular.module("myApp",['ngRoute']);
//routing
app.config(['$routeProvider',function($routeProvider){
$routeProvider
.when('/one',{templateUrl:'one.html'})
.when('/two',{templateUrl:'two.html'})
.otherwise({templateUrl:'one.html'});
}]);
//config
app.run(['rootScope', function($rootScope){
$rootScope.age = 25;
}]);
//controller
app.controller('myCtrl',function($scope, $rootScope){
$scope.name = "Peter";
});
</script>
</body>
</html>
one.html
ONE => {{name}},{{age}}
two.html
TWO => {{name}},{{age}}
更新错误:
您应该将 ngRoute 作为依赖项注入模块
var app = angular.module("myApp",[ngRoute]);
你可以在docs中看到第一个参数应该是一个函数
run(function(injectables) { // instance-injector
// This is an example of a run block.
// You can have as many of these as you want.
// You can only inject instances (not Providers)
// into run blocks
});
但是在你的代码中
app.run('rootScope',function($rootScope,$state){
第一个参数是 string 而不是函数。
所以,只需删除它,或者如果你想在数组中使用可注入语法包装
app.run(['$rootScope','$state',function($rootScope,$state){...}]}
但您似乎还有另一个错误:使用 $state 提供程序,但此提供程序不是 ngRoute
模块的一部分,而是 的一部分ui-路由器。无论如何,当运行块执行时,当前路由可以不被定义。
没有多余的工作样本
//app declaration
var app = angular.module("myApp", ['ngRoute']);
//routing
app.config(['$routeProvider', function($routeProvider) {
$routeProvider
.when('/one', {
template: '<div>one: {{name}} | {{age}}</div>'
})
.when('/two', {
template: 'two: {{name}} | {{age}}'
})
.otherwise({
redirectTo: '/one'
});
}]);
//config
app.run(function($rootScope) {
$rootScope.age = 25;
});
//controller
app.controller('myCtrl', function($scope, $rootScope) {
$scope.name = "Peter";
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.5/angular.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.5/angular-route.js"></script>
<div ng-app="myApp" ng-controller="myCtrl">
<ng-view></ng-view>
</div>
代码中,angular().运行()注入了$rootScope和$state.
app.run('rootScope',function($rootScope,$state){
if($state.current.name == 'one'){$rootScope.age = 25;}
if($state.current.name == 'two'){$rootScope.age = 30;}
});
因为 $state 不是 ngRoute 模块的一部分,所以你不能注入它。
错字,
app.run(['rootScope', function($rootScope){
$rootScope.age = 25;
}]);
应该是
app.run(['$rootScope', function($rootScope){
$rootScope.age = 25;
}]);
我正在尝试通过 $scope 和 $rootScope 访问姓名和年龄,但即使我觉得我做的都是正确的,也会出现错误。有人可以帮我找出错误在哪里吗?
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.5/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.5/angular-route.min.js"></script>
</head>
<body ng-app="myApp" ng-controller="myCtrl">
<a href="#/one">One</a><a href="#/two">Two</a>
<ng-view></ng-view>
<script>
//app declaration
var app = angular.module("myApp",['ngRoute']);
//routing
app.config(['$routeProvider',function($routeProvider){
$routeProvider
.when('/one',{templateUrl:'one.html'})
.when('/two',{templateUrl:'two.html'})
.otherwise({templateUrl:'one.html'});
}]);
//config
app.run(['rootScope', function($rootScope){
$rootScope.age = 25;
}]);
//controller
app.controller('myCtrl',function($scope, $rootScope){
$scope.name = "Peter";
});
</script>
</body>
</html>
one.html
ONE => {{name}},{{age}}
two.html
TWO => {{name}},{{age}}
更新错误:
您应该将 ngRoute 作为依赖项注入模块
var app = angular.module("myApp",[ngRoute]);
你可以在docs中看到第一个参数应该是一个函数
run(function(injectables) { // instance-injector
// This is an example of a run block.
// You can have as many of these as you want.
// You can only inject instances (not Providers)
// into run blocks
});
但是在你的代码中
app.run('rootScope',function($rootScope,$state){
第一个参数是 string 而不是函数。
所以,只需删除它,或者如果你想在数组中使用可注入语法包装
app.run(['$rootScope','$state',function($rootScope,$state){...}]}
但您似乎还有另一个错误:使用 $state 提供程序,但此提供程序不是 ngRoute
模块的一部分,而是 的一部分ui-路由器。无论如何,当运行块执行时,当前路由可以不被定义。
没有多余的工作样本
//app declaration
var app = angular.module("myApp", ['ngRoute']);
//routing
app.config(['$routeProvider', function($routeProvider) {
$routeProvider
.when('/one', {
template: '<div>one: {{name}} | {{age}}</div>'
})
.when('/two', {
template: 'two: {{name}} | {{age}}'
})
.otherwise({
redirectTo: '/one'
});
}]);
//config
app.run(function($rootScope) {
$rootScope.age = 25;
});
//controller
app.controller('myCtrl', function($scope, $rootScope) {
$scope.name = "Peter";
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.5/angular.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.5/angular-route.js"></script>
<div ng-app="myApp" ng-controller="myCtrl">
<ng-view></ng-view>
</div>
代码中,angular().运行()注入了$rootScope和$state.
app.run('rootScope',function($rootScope,$state){
if($state.current.name == 'one'){$rootScope.age = 25;}
if($state.current.name == 'two'){$rootScope.age = 30;}
});
因为 $state 不是 ngRoute 模块的一部分,所以你不能注入它。
错字,
app.run(['rootScope', function($rootScope){
$rootScope.age = 25;
}]);
应该是
app.run(['$rootScope', function($rootScope){
$rootScope.age = 25;
}]);