/ / Czy właściwości dyrektywy są powiązane w kontrolerze? - angularjs, wiązanie danych, dyrektywa angularjs

Czy właściwości dyrektywy są powiązane w kontrolerze? - angularjs, data binding, angularjs-directive

Zastanawiam się, czy mam gdzieś jakieś złe okablowanie i / lub nie jest bezpiecznie zakładać, że w kontrolerze dyrektywy (z izolowanym zakresem) wszystkie właściwości są ustawione?

Przykład:

.directive("wordEditor",function(){
return {
scope : {
categories : "=",
},

controller : function($scope)
{
$scope.categories; // is it safe?
...

Do tej pory działało dobrze, ale kiedy zacząłem bawić się zagnieżdżonymi dyrektywami, otrzymałem niezdefiniowane właściwości.

Chciałbym więc uporządkować przynajmniej jedną rzecz - czy mam gwarancję (w przypadku obecnej dyrektywy), że właściwość jest powiązana z kontrolerem podczas jej wykonywania?

Nie pytam, czy ma wartość w sensie globalnym, ponieważ zależy od tego, co ma świat zewnętrzny, pytam o to, co dzieje się w ramach danej dyrektywy.

Odpowiedzi:

2 dla odpowiedzi № 1

czy mam gwarancję (zgodnie z obowiązującą dyrektywą), że właściwość jest związana z kontrolerem podczas jej wykonywania?

Nie ma gwarancji. Właściwość zakresu powiązanego może być dostępna w kontrolerze potomnym tylko wtedy, gdy jest ona w tym momencie dostępna w kontrolerze macierzystym. Nie będzie to prawdą, jeśli dyrektywa będzie hostowana przez ng-repeatlub używa kontrolera nadrzędnego $onInit na przykład do zainicjowania jego właściwości.

Ze względu na charakter wiązania danych należy zawsze zakładać, że powiązane właściwości nie są jeszcze dostępne lub mogą zostać później zmienione, należy je obejrzeć za pomocą $scope.$watch lub $onChanges.