Потому что это делает вашу директиву собственный модуль (дизайн-мудрый, я не говорю о angular.module
s ;-) с четким Defined автономный интерфейс , что означает, что он может использоваться повторно в любом контексте. Это также делает его код читаемым, так как все, с чем работает директива, находится в коде директив, а не в какой-либо магической родительской области, на которую он опирается. Давайте посмотрим на пример без изолированный объем:
Контроллер:
angular.module("carShop",[])
.controller("CarStorefrontController",function(){
//For simplicity
this.cars = [
{ name: 'BMW X6', color: 'white' },
{ name: 'Audi A6', color: 'black' }
];
});
Директива:
angular.module("carShop")
.directive("carList",function(){
return {
template: ['<ul>',
'<li ng-repeat="car in vm.cars">',
'A {{car.name}} in shiny-{{car.color}}',
'</li>',
'</ul>'].join("")
};
});
Страница:
<div ng-app="carShop" ng-controller="CarStorefrontController as vm">
<h2>Welcome to AwesomeCarShop Ltd. !</h2>
<p>Have a look at our currently offered cars:</p>
<car-list></car-list>
</div>
Это работает, но не подлежит повторному использованию , Если я хочу отобразить список машин в другом месте в своем приложении, мне нужно переименовать мой контроллер там в vm
и иметь в нем поле с именем cars
, содержащее мой массив автомобилей для его работы. Но если я изменить директиву
angular.module("carShop")
.directive("carList",function(){
return {
scope: { cars: '=' },
template: [ /* same as above */ ].join("")
};
});
и изменить <car-list></car-list>
на моей странице витрины к <car-list cars="vm.cars"></car-list>"
, я могу повторно использовать эту директиву везде проездом в любом массиве автомобилей, не заботясь, где этот массив пришел. Кроме того, теперь я могу заменить свой контроллер на странице магазина совершенно другим, не меняя определения своей директивы (и не меняя всех других мест, где я использую авто-список).
Это действительно по той же причине, почему вы не должны поместить все ваши javascript-переменные в одну глобальную область, чтобы они были легко доступны извне: возможность повторного использования, удобочитаемость, ремонтопригодность - это то, что вы получаете посредством модуляции и encapsulating ваш код , перейдя на low coupling and high cohesion после black-box-principle.
Кроме того, любопытное объяснение и многое другое об изолированном объеме здесь: http://onehungrymind.com/angularjs-sticky-notes-pt-2-isolated-scope/ Отличный ответ! – tbutcaru
pls отметьте мой вопрос как полезный –
@ VeskoVujovic Если вы сделаете это немного более понятным, добавьте некоторые ** короткие примеры кода и предоставите [ссылки] (https://docs.angularjs.org/guide/directive#isolating- the-scope-of-a-directive) Id будет рад сделать это :-) – LionC