0

Комбо в теме дает мне трудное время, я уверен, что это простая ошибка где-то.Угловой, машинописный и угловой интерфейс с «контроллером как»

Контроллер:

class JobCtrl { 

     job: Object; 

     public $inject = ['$log', '$resource', 'ApiDataEndpoint', '$stateParams']; 
     constructor(public $log, public $resource, public ApiDataEndpoint, public $stateParams) {  
      var JobRes = $resource(ApiDataEndpoint.url+'job/:id', {}); 

      var jobCall = JobRes.get({ id: $stateParams.id},function(){ 
       this.job = jobCall; 
      }) 
     } 
    } 

Маршрут определяется следующим образом:

.state('app.job', { 
     url: '/jobs/:id', 
     views: { 
      'menuContent': { 
       templateUrl: 'templates/job.html', 
       controller: 'JobCtrl', 
       controllerAs: 'vm' 
      } 
     } 
    }) 

на мой взгляд, я получил это:

<p> 
Name: {{vm.job.Name}} 
</p> 

Но вид никогда не обновляется при возврате обратного вызова , Я предполагаю, что это либо проблема асинхронности, либо проблема с областью. Извлечение ресурса отлично работает, представление просто не обновляется. Кажется, я не могу установить эту работу из обратного вызова. Что мне здесь не хватает?

+0

Вы видите '{{vm.job.Name}}' в представлении? Если это так, ваш код недействителен и должна произойти ошибка. Или вы просто видите 'Имя:'? – SjaakvBrabant

+0

Я просто вижу Имя: Я думаю, что JS действителен. Я просто не могу установить this.job из обратного вызова ... Если я изменю свой код на использование $ scope и удалю «как vm», а затем в обратном вызове устанавливает $ scope.job все работает, но я хочу использовать синтаксис «this» – iCediCe

+0

Не 'this.job = jobCall;' назначить $ prom? – segFault

ответ

0

Я думаю, что вы можете сделать что-то вроде этого (непроверенные):

var jobCall = JobRes.get({ id: $stateParams.id},function(response){ 
    job = response.data; 
}) 
+0

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

+0

и просто выполните 'job = response.data;' –

+0

Да, 'job', вероятно, прав в этом случае – segFault

0

это не доступно внутри функции обратного вызова так, как вы его реализовать. Изменение использовать лямбда, и это будет:

От этого:

var jobCall = JobRes.get({ id: $stateParams.id},function(){ 
      this.job = jobCall; 
     }) 

Для этого:

var jobCall = JobRes.get({ id: $stateParams.id}, (response) => { 
      this.job = response.data; 
     }); 
+0

Это, похоже, не работает. Проблема заключается не в доступе к ответу, а в присвоении его «этому». Решение от @Gustav в комментариях к исходному вопросу работает .... – iCediCe

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