2015-07-21 3 views
0

Я пытался понять это на некоторое время, но я не могу найти нигде, что описывает его, и мое тестирование не дало мне никаких ответов.Разница между ng-контроллером и свойством управления

Я создал пользовательскую директиву и хочу, чтобы область действия директивы была дочерней областью родительской области. Я нашел два разных подхода, которые решают это.

A:

angular.module('myModule').directive('myDirective', function(){ 
    return{ 
     scope: true, 
     template: '<div>{{var}}</div>', 
     controller: function($scope){ 
      $scope.var = 123; 
     } 
    }; 
}); 

B:

angular.module('myModule').directive('myDirective', function(){ 
    return{ 
     scope: false, 
     template: '<div ng-controller="MyController">{{var}}</div>' 
    }; 
}); 

angular.module('myModule').controller('MyController', function($scope){ 
    $scope.var = 123; 
}); 

Каковы различия между этими двумя подходами? Оба, кажется, делают то, что я хочу, но есть ли некоторые преимущества/недостатки использования одного подхода над другим?

Любые рекомендации приветствуются.

ответ

2

Вы не должны использовать последний, если у вас нет повода для этого. Если вы хотите создать многоразовый контроллер и использовать его в своей директиве, просто определить директиву, как например:

angular.module('myModule').directive('myDirective', function(){ 
    return{ 
     scope: false, 
     controller: 'MyController', 
     template: '{{var}}' 
    }; 
}); 
1

Второй подход позволит вам повторно использовать контроллер на нескольких элементах. Первый отличается от этого директором и может быть разделен.

1

Вариант B, кажется, в состоянии разделить контроллер. Однако с точки зрения дизайна контроллеры не должны использоваться совместно. Контроллер должен содержать определенную бизнес-логику.

Если какая-либо модель/операции должны использоваться совместно, извлеките их из службы.

Смежные вопросы