2015-01-18 3 views
18

Я пытаюсь максимально ограничить мое использование $scope в моих контроллерах и заменить его синтаксисом Controller as.

Моя текущая проблема заключается в том, что я не уверен, как позвонить $scope.$apply() в мой контроллер, не используя $scope.

Edit: Я использую машинопись 1.4 в сочетании с угловым

У меня есть эта функция

setWordLists() { 
    this.fetchInProgress = true; 
    var campaignId = this.campaignFactory.currentId(); 
    var videoId = this.videoFactory.currentId(); 

    if (!campaignId || !videoId) { 
    return; 
    } 

    this.wordsToTrackFactory.doGetWordsToTrackModel(campaignId, videoId) 
    .then((response) => { 
    this.fetchInProgress = false; 
    this.wordList = (response) ? response.data.WordList : []; 
    this.notUsedWordList = (response) ? response.data.NotUsedWords : []; 
    }); 
} 

набираемые

$scope.$on("video-switch",() => { 
      this.setWordLists(); 
}); 

И это (массивы wordList и notUsedWordList) на мой взгляд, не обновляется:

<div class="wordListWellWrapper row" ng-repeat="words in wordTrack.wordList"> 
    <div class="col-md-5 wordListWell form-control" ng-class="(words.IsPositive)? 'posWordWell': 'negWordWell' "> 
    <strong class="wordListWord">{{words.Word}}</strong> 
    <div class="wordListIcon"> 
     <div class="whiteFaceIcon" ng-class="(words.IsPositive)? 'happyWhiteIcon': 'sadWhiteIcon' "></div> 
    </div> 
    </div> 
    <div class="col-md-2"> 
    <span aria-hidden="true" class="glyphicon-remove glyphicon" ng-click="wordTrack.removeWord(words.Word)"></span> 
    </div> 
</div> 

По этим же линиям $apply есть ли другой способ позвонить $scope.$on с помощью Controller as?

Спасибо!

+0

Вам нужно будет использовать '$ scope' (или' $ rootScope') для '$ apply' и' $ on'. – tasseKATT

+1

до 99% всех ситуаций, вам нужно всего лишь называть '$ scope. $ Apply()', когда вы напрямую работаете с dom, не зная знаний. К сожалению, многие люди прибегают к '$ scope. $ Apply()' как «fix-all», когда что-то не работает, но обычно лучше сделать правильный код, чтобы угловой знал о происходящем. – Claies

+0

@ Андрей, вы видите что-нибудь в моем коде, которое указывает на что-то сломанное или плохо написанное, которое могло бы решить мою проблему? –

ответ

6

Чтобы ответить на данный вопрос, вы можете использовать методы $scope() в контроллере при использовании контроллера как синтаксиса, если вы передаете $scope в качестве параметра функции. Однако одним из основных преимуществ использования синтаксиса controller-as не является использование $scope, что создает затруднительное положение.

Как было обсуждено в комментариях, новый вопрос будет сформулирован плакатом для рассмотрения конкретного кода, требующего вначале $scope, с некоторыми рекомендациями по реструктуризации, если это возможно.

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