2013-10-26 5 views
1

Edit: Plunker работает, фактический код не является: http://plnkr.co/edit/5oVWGCVeuTwTARhZDVMl?p=preview

Сервис содержит типичный геттер \ сеттер материал, кроме того, что она функционирует нормально, так Я не опубликовал его код, чтобы избежать TLDR.

Версия TLDR: попытка ng-init присвоить значение, полученное с помощью AJAX, в ngModel текстовой области, запрос разрешается с правильным значением, но текстовое поле остается пустым.

родительская функция контроллера (переговоры к службе):

$scope.model.getRandomStatus = function(){ 
    var deffered = $q.defer(); 
var cid = authService.getCompanyId(); 

var suggestions = companyService.getStatusSuggestions(cid); 
if(suggestions && suggestions.length > 0){ 
     deffered.resolve(suggestions[Math.floor(Math.random(suggestions.length) + 1)].message); 
     return deffered.promise;//we already have a status text, great! 
    } 

    //no status, we'll have to load the status choices from the API 
    companyService.loadStatusSuggestions(cid).then(function(data){ 
     companyService.setStatusSuggestions(cid, data.data); 
     var result = data.data[Math.floor(Math.random(data.data.length) + 1)]; 
     deffered.resolve(result.message); 
    }, 
    function(data){ 
     _root.inProgress = false; 
     deffered.resolve(''); 
     //failed to fetch suggestions, will try again the next time the compnay data is reuqired 
    }); 
    return deffered.promise; 
} 

ребенка контроллер:

.controller('shareCtrl', function($scope){ 
    $scope.layout.toggleStatusSuggestion = function(){ 
     $scope.model.getRandomStatus().then(function(data){ 
      console.log(data);//logs out the correct text 
      //$scope.model.formData.shareStatus = data;//also tried this, no luck 
      return data.message; 
     }); 
    $scope.model.formData.shareStatus = $scope.layout.toggleStatusSuggestion();//Newly edited 
    } 
}); 

HTML:

<div class="shareContainer" data-ng-controller="shareCtrl"> 
<textarea class="textAreaExtend" name="shareStatus" data-ng-model="model.formData.shareStatus" data-ng-init="model.formData.shareStatus = layout.toggleStatusSuggestion()" cols="4"></textarea> 
</div> 
+0

может просто установить значение в 'then()' в контроллере вместо использования 'ng-init'. Ничего не возвращается из метода 'toggleStatusSuggestion' – charlietfl

+0

Ну, я также пробовал указанную выше строку в контроллере (помечен как« // new edit »). Пока не повезло. Спасибо за быстрый ответ! –

+0

Теперь я работаю над плунгом, чтобы поэкспериментировать с –

ответ

2

Я считаю, что вы хотели это:

$scope.model.getRandomStatus().then(function(data){    
      $scope.model.formData.shareStatus = data.message; 

}); 

Возвращаясь что-то изнутри then ничего из функции не возвращает окружив его, и поэтому ничего не делает

+0

http://plnkr.co/edit/5oVWGCVeuTwTARhZDVMl?p=preview вот рабочая скрипка, которую я создал, я просто не могу сказать, что неправильно с моим кодом (фактическим) –

+0

вы не пробовали мое предложение. Логика неправильно пытается вернуть что-то из 'then()', и поскольку она выполняется aysnch, вы должны установить любые необходимые значения в 'then'. Ваш код будет срабатывать до появления 'then' – charlietfl

+0

Хорошо, решила проблему, у меня была специальная директива проверки, которая нарушала все это. с $ parsers и $ formatters, но я думаю, что вы отвечаете хорошо для всех, кто это рассмотрит, так что в этом отношении он правильный. –

0

Оказывается, что я имел директиву пользовательских проверок, который наблюдает за изменениями в модели с помощью $ форматтеров и limting его до 80 символов (твиттер), он терпел неудачу, так как я не ожидал, что прогматически вставить недопустимые значения в мои формы, очень глупо, но может случиться с кем угодно. Придется внести в него некоторые изменения, поэтому стоит помнить, если это случится с кем-то еще.

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