Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript $scopes角js_Javascript_Angularjs_Routing - Fatal编程技术网

Javascript $scopes角js

Javascript $scopes角js,javascript,angularjs,routing,Javascript,Angularjs,Routing,我是个初学者。我阅读了angular routing教程,我对下面的代码感到怀疑,因为其中一个控制器的$scope似乎被另一个控制器访问。据我所知,我们无法访问一个控制器的$scope数据,而另一个控制器无法访问该数据。有人能解释一下这种情况吗?代码在这里运行良好 <html lang="en" ng-app="myApp"> <body> <div ng-controller="directoryController"> <div ng-vi

我是个初学者。我阅读了angular routing教程,我对下面的代码感到怀疑,因为其中一个控制器的$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>

var-app=angular.module(“myApp”,['ngRoute']);
app.config(函数($routeProvider){
$routeProvider
.when('/',{templateUrl:'directory.html'})
.when('/view/:id',{templateUrl:'view.html',controller:'viewController'})
。否则({重定向到:'#'})
});
app.controller('directoryController',['$scope',function($scope){
//我在这里定义了一个名为data的数组,假设它在那里
$scope.people=数据;
}]);
app.controller('viewController',['$scope','$routeParams',函数($scope,$routeParams){
$scope.person=$scope.people[$routeParams.id]
}]);

角度
$scope
像一棵树,主干是
$rootScope
,其他每个
$scope
分支都来自该或另一个
$scope
,因此既然
视图控制器
directoryController
的子对象,您就可以访问其中的变量

$rootScope -> directoryController -> viewController

viewController
可以访问所有父
$scope
s;
directoryController
可以访问
$rootScope
,而
$rootScope
只能访问自身。

范围通常是父范围固有的

执行摘要: 在AngularJS中,子作用域通常从其父作用域原型继承。此规则的一个例外是使用
作用域:{…}
的指令——这会创建一个不典型继承的“隔离”作用域。(和带有转换的指令)此构造通常在创建“可重用组件”指令时使用。在指令中,默认情况下直接使用父范围,这意味着指令中来自父范围的任何更改都将在父范围中更改。如果设置
scope:true
(而不是
scope:{…}
),则该指令将使用原型继承

--

作用域层次结构 每个角度应用程序只有一个根作用域,但可能有多个子作用域

应用程序可以有多个作用域,因为某些指令会创建新的子作用域(请参阅指令文档,了解哪些指令会创建新的作用域)。创建新作用域时,它们将作为其父作用域的子作用域添加。这将创建一个树结构,它与它们所连接的DOM平行

当Angular计算
{{name}}
时,它首先查看与name属性的给定元素关联的范围。如果没有找到这样的属性,它将搜索父作用域,依此类推,直到到达根作用域。在JavaScript中,这种行为称为原型继承,而子作用域原型继承自其父作用域

--