2

У меня есть контроллер, который вызывает службу, которая выполняет http.getДиректива Update Scope После контроллера обслуживания вызовов

app.controller('myController', function ($scope, mService) { 

    $scope.chair; 

    myService.getData().then(function (data) { 
     $scope.chair = data.chairID; 
    }); 

}); 

В пределах объема контроллера в $, у меня есть директивы, для которого я пытаюсь передать значение $ scope.chair:

<section ng-controller="mycontroller"> 

    <my-directive data-chair="chair"></my-directive> 

</section> 

И в myDirective.js

restrict: 'E', 
replace: true, 
templateUrl: 'app/some-file.html', 
scope: { 
    chair: '=' 
}, 
controller: [ '$scope', function ($scope) { 
    alert('got chair : ' + $scope.chair); 
    .... 

Однако с вышесказанным, я вижу undefined при оповещении («стул:« + $ scope.chair »);

В-регулятора, если я жёстко стул:

app.controller('myController', function ($scope, mService) { 

    $scope.chair = 'hello'; 

    myService.getData().then(function (data) { 
     $scope.chair = data.chairID; 
    }); 

}); 

Моя директива будет отображаться hello.

+1

Какую версию углового вы используете? – Makoto

+0

Использование v1.4.0 спасибо –

ответ

0

Это должно работать:

.directive('myDirective', function() { 
    return { 
    restrict: 'E', 
    replace: true, 
    templateUrl: 'app/some-file.html', 
    scope: { 
     chair: '=' 
    }, 
    link: function(scope, element, attrs) { 
     alert('got chair : ' + scope.chair); 
    } 
    } 
}); 
+0

Спасибо, однако мне нужно получить к нему доступ в контроллере, а не ссылку –

1

«Стул» внутренняя переменная не может быть установлен при попытке доступа к нему в директиве. Также кажется, что вы загружаете значение асинхронно через вашу службу.

Вам необходимо прикрепить часы в своей директиве. Обратный вызов, который вы передаете часам, будет вызываться на следующей угловой фазе $ digest после изменения значения переменной сферы.

... 
controller: [ '$scope', function ($scope) { 
    $scope.$watch('chair', function(chairValue) { 
     if (chairValue === undefined) return; 

     // There is a value. 
     alert('got chair : ' + $scope.chair); 
    }); 
}] 

Этот код приведет к функции обратного вызова вызывается каждый раз, когда изменяется значение.

Если вы не хотите обрабатывать изменения значений, очистите часы после того, как значение будет стабильным (отличается от undefined). Это приведет к повышению производительности, если у вас есть сложные виды со многими связями и часами.

... 
controller: [ '$scope', function ($scope) { 
    var unwatch = $scope.$watch('chair', function(chairValue) { 
     if (chairValue === undefined) return; 

     // There is a value. 
     alert('got chair : ' + $scope.chair); 
     unwatch(); 
    }); 
}] 
Смежные вопросы