2016-01-04 2 views
1

Я изо всех сил старался работать с интервалом $. Поэтому я надеялся, что все здесь могут выправить меня. Вот мой случай.

У меня есть страница, содержащая кнопку «Обновить». когда эта кнопка нажата, она вызывает службу REST для обновления строки в таблице. На бэкэнде у нас есть процесс, который контролирует это поле и запускается, когда он видит представленную стоимость. Как только этот процесс будет выполнен, он изменит значение на завершенное.

То, что я пытаюсь сделать, - это нажать эту кнопку, а div отобразит статус «Отправлено». то я хочу использовать $ interval для опроса этого поля (через вызов REST) ​​и изменить мой просмотр после его перемещения до значения «завершено». Вкратце измените представление «Отправлено» на «Завершено».

Моя проблема когда кнопка нажата, и я могу сделать мой отдых вызов, если я могу установить «таблицы данных» на сферу я получаю

TypeError: Cannot set property 'clst_rfrstatus_data_table' of undefined

Если изменить его и объявить таблицу данных, как так

var refreshStatus_data_table = StatusService.getRefreshStatus().get({cluster: $stateParams.cluster}); 
refreshStatus_data_table.$promise.then(function (data) { 
      for (var x = 0; x < data.message.length; x++) { 
       $scope.refresh_status = (data.message[x].status == "null") ? data.message[x].status = "" : data.message[x].status; 
       $scope.$digest; 
      } 
     }); 
    },3000); 
..snip.. 

я

ConsoleAgent: TypeError: Cannot set property 'refresh_status' of undefined

Я не после, если я не в объеме или что .. Любая помощь оценен.

Код:

MYAPP-routes.js

myAppconfig(function ($stateProvider, $urlRouterProvider) { 
'use strict'; 
$urlRouterProvider.otherwise('/home'); 
$stateProvider 
.state('status_page', { 
     url: '/status_page/:cluster', 
     templateUrl: 'views/clusters/status_page.html', 
     controller: 'StatusController' 
    }) 
..snip.. 

Контроллер

clusterApp.controller('StatusController',['$scope','$interval','$state','$stateParams','StatusService', function ($scope, $interval, $state, $stateParams, StatusService) { 
$scope.refresh_status = ""; 
$scope.ButtonClick = function ($scope) { 
$scope.refreshStatus_data_table = StatusService.getRefreshStatus().get({cluster: $stateParams.cluster}); 
    $interval(function(){ 
     $scope.refreshStatus_data_table.$promise.then(function (data) { 
      for (var x = 0; x < data.message.length; x++) { 
       $scope.refresh_status = (data.message[x].status == "null") ? data.message[x].status = "" : data.message[x].status; 

       $scope.$digest; 
      } 
     }); 
    },3000); 
..snip.. 
} //end controller 

вид

<div> 
<input type="button" value="Update" ng-click="ButtonClick()" /> 
     Status: {{refresh_status}} 
</div> 

ответ

1

Ваш заголовок метода для ButtonClick ожидает, что вы пройдете в области $ scope, но вы его вызываете без каких-либо изменений, поэтому локальная переменная области $ undefined в вашем тесте метода. Вы не должны пройти $ рамки, хотя:

$scope.ButtonClick = function() { 
... 
} 
+0

интересной, я извлекал $ объема от моего ButtonClick в моем контроллере '$ scope.ButtonClick = функция() { ..snip .. ' и он работает. Я не уверен, что я здесь сделал. Был ли мой код мышлением $ scope каким-то пустым объектом? – Danman06

+1

Да, по существу переменная $ scope в вашем методе ButtonClick отличается от переменной clope вне метода. Это связано с изменением переменных, в основном, javascript создавал локальную переменную с именем $ scope, которая полностью отличалась от вашей глобальной области $ и доступна только в вашем вызове функции. Удаление из параметров метода отнимает эту локальную версию, чтобы ваша функция знала, что она использует глобальную. – bstockwell

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