Я изучаю AngularJS 1 прямо сейчас и запутался в области и контроллерах. Я не понимаю, почему мой контроллер имеет доступ ко всем переменным, определенным в контроллере, который контролирует представление, в котором была размещена директива, учитывая, что я ввел в свою директиву пустую область выделения, а также bindToController, который ссылается только на одну из переменных контроллера представления.Как управлять совместным использованием/блокировкой данных между Угловым директивным контроллером и контроллером представления директива размещается внутри
index.html
<!doctype html>
<html ng-app="app">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous"></head>
</head>
<body>
<div ng-controller='MainController as ctrl'>
<div class="container">
<basic-directive id= "ctrl.here"></basic-directive>
</div>
</div>
<script src="js/angular.js"></script>
<script src="js/app/app.js"></script>
<script src="js/app/controllers/MainController.js"></script>
<script src="js/app/directives/basicDirective.js"></script>
</body>
</html>
MainController.js
function MainController() {
ctrl = this;
ctrl.here = "Hello World";
ctrl.nowhere = "Hello Nowhere";
};
angular
.module('app')
.controller('MainController', MainController);
basicDirective.js
function basicDirective() {
return {
scope: {},
template: [
'<p>{{ basic.id }} </p>',
'<p>{{ basic.there }} <p>',
'<p>{{ basic.somewhere }}</p>'
].join(""),
controller: function() {
dr = this;
dr.there = ctrl.here
dr.somewhere = ctrl.nowhere
},
controllerAs: "basic",
bindToController: {id: "="}
}
}
angular
.module('app')
.directive('basicDirective', basicDirective);
, который делает:
<basic-directive id="ctrl.here" class="ng-isolate-scope">
<p class="ng-binding">Hello World </p>
<p class="ng-binding">Hello World </p>
<p class="ng-binding">Hello Nowhere</p>
</basic-directive>
Мое настоящее понимание до сих пор ожидало, что только первый «Hello World» отобразит, потому что это единственный, который я привязал к контроллеру моей директивы. Очевидно, что чего-то не хватает. Может кто-нибудь объяснить? И есть ли какая-либо практическая разница между dr.there
и dr.id
в моем контролере?
p.s. Имейте в виду, что для целей публикации здесь я упростил свой код, чтобы иметь дело только с этой проблемой, поэтому директива, как написано, определенно очень надуманна.