我是个角的初学者。我学习了角路由教程,我对下面的代码表示怀疑,在这些代码中,一个控制器的$scope似乎被另一个控制器访问。据我所知,我们无法访问一个控制器的$scope的数据,而另一个控制器则无法访问。有人能解释一下这种情况吗?密码在这里很好。
<html lang="en" ng-app="myApp">
<body>
<div ng-controller="directoryController">
<div ng-view>
</div>
</div>
</body>
<script src="angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0rc1/angular-route.min.js"></script>
<script>
var app = angular.module("myApp", ['ngRoute']);
app.config(function ($routeProvider) {
$routeProvider
.when('/', {templateUrl: 'directory.html'})
.when('/view/:id', {templateUrl: 'view.html', controller: 'viewController'})
.otherwise({redirectTo: '#'})
});
app.controller('directoryController', ['$scope', function ($scope) {
//i have defined an array called data here suppose its there
$scope.people = data;
}]);
app.controller('viewController', ['$scope', '$routeParams', function ($scope, $routeParams) {
$scope.person = $scope.people[$routeParams.id]
}]);
</script>
</html>发布于 2016-02-09 07:24:59
角$scope就像一棵树,树干是$rootScope,每个其他的$scope分支都来自这个或另一个$scope,所以由于您的viewController是directoryController的子代,所以可以访问其中的变量。
$rootScope -> directoryController -> viewControllerviewController可以访问所有父$scope,directoryController可以访问$rootScope,$rootScope只能访问自己。
发布于 2016-02-09 08:31:36
从父作用域中固有的作用域。
执行摘要: 在AngularJS中,子作用域通常是从其父作用域中继承的。这个规则的一个例外是使用
scope: { ... }的指令--这会创建一个“隔离”范围,而这个作用域并不是原型继承的。(以及带有transclusion的指令)这个构造在创建“可重用组件”指令时经常使用。在指令中,父作用域默认直接使用,这意味着来自父作用域的指令中的任何更改也将在父作用域中更改。如果您设置了scope:true(而不是scope: { ... }),那么该指令将使用原型继承。
范围层次 每个角应用程序都有一个根范围,但可能有几个子作用域。 应用程序可以有多个作用域,因为有些指令会创建新的子作用域(请参阅指令文档,查看哪些指令创建了新的作用域)。当创建新的作用域时,它们将作为其父作用域的子作用域添加。这创建了一个树结构,它与它们所连接的DOM平行。 当角计算
{{name}}时,它首先查看与名称属性的给定元素关联的作用域。如果找不到此类属性,则会搜索父作用域等,直到到达根范围为止。在JavaScript中,这种行为称为原型继承,而子作用域通常是从其父级继承的。
https://stackoverflow.com/questions/35286060
复制相似问题