2014-02-10 2 views
1

나는 객체의 배열이 presentations각도 선택 배열은

나는 select 요소에서 사용하려고 해요라고,하지만 그것은 작동하지 않습니다. 선택 상자가 아무 것도 표시되지 않고 공백으로 표시됩니다.

나는 배열이나 객체가 아니라 객체 배열을 원하기 때문에 그럴 것이라고 생각한다.

<select ng-model="secondPres" ng-options="p.name for p in presentations" ></select> 

그리고 내 presentations 배열을 CONSOLE.LOG 얻을 수있는이 :

내가하고 있어요

0: Object 
name: "club" 
origName: "club" 
slide: "1" 
tenant: "grant" 

1: Object 
name: "2slide" 
origName: "club" 
slide: "1" 
tenant: "grant" 

2: Object 
name: "CT_Stress_Test" 
origName: "club" 
slide: "1" 
tenant: "grant" 

그래서 무슨 일이야?

여기 내 컨트롤러 코드가 있습니다. 내가 생성 한 console.log는 맨 아래에있는 것을 보여줍니다. 확장 (는) 귀하 그냥 각도가 새 배열 항목을 볼 수 있도록하기 위해 $scope.$apply() 후 당신의 for 루프 누락 data-ng-init

var socket = io.connect('https://xxxxxxx.xxxxxxxxxxxxx.net:3000'); 

$scope.versions =[]; 
$scope.presentations=[]; 
$scope.secondPres; 
$scope.expand = function(){ 
    console.log("expand hit " + presentation1); 
    var urlToSign = presentation1; 
    var urlToSign = urlToSign.replace(/^(.*)\/Slide\d_v\d.PNG(.*)/,"$1"+""); 
    console.log("url to sign = " + urlToSign); 
    socket.emit('getSignedSlidesFromUrl',urlToSign); 
    socket.on('signedUrls',function(data){ 
     console.log('got back signedUrls' + data); 
     $scope.slides=data; 
     $scope.$apply(); 

     var re = /^.*\/\/.*\/.*\/(.*)/; 
     var fileName = re.exec(urlToSign)[1]; 

     for(i=0;i<presentationList.length;i++){ 
      var url = presentationList[i]; 
      console.log(url); 
      var re = /^.*\/\/.*\/(.*)\/.*$/; 
      var re2 = /^.*\/\/.*\/(.*)\/.*\//; 
      var re3 =/^.*\/\/.*\/.*\/Slide(\d*)/; 
      var fileName2 = re.exec(url)[1]; 
      var customerName = re2.exec(url)[1]; 
      var slideNum = re3.exec(url)[1]; 

      $scope.presentations.push({name:fileName2, origName:fileName, tenant:customerName, slide:slideNum}); 
     } 
     console.log($scope.presentations); 
    }); 
}; 
+0

컨트롤러 코드를 게시 할 수 있습니까? –

+0

이 배열은 범위 소화가없는 외부 서비스에서 제공됩니까? – lib3d

+0

@MikeRobinson이 완료되었습니다. – Houseman

답변

1

호출됩니다. 또는 snippit과 비슷한 $scope.$apply()에 전달 된 함수에서 이벤트 핸들러의 전체 내용을 래핑하십시오.

socket.on('signedUrls',function(data){ 
    $scope.$apply(function() { 
     console.log('got back signedUrls' + data); 
     $scope.slides=data; 

     var re = /^.*\/\/.*\/.*\/(.*)/; 
     var fileName = re.exec(urlToSign)[1]; 

     for(i=0;i<presentationList.length;i++){ 
      var url = presentationList[i]; 
      console.log(url); 
      var re = /^.*\/\/.*\/(.*)\/.*$/; 
      var re2 = /^.*\/\/.*\/(.*)\/.*\//; 
      var re3 =/^.*\/\/.*\/.*\/Slide(\d*)/; 
      var fileName2 = re.exec(url)[1]; 
      var customerName = re2.exec(url)[1]; 
      var slideNum = re3.exec(url)[1]; 

      $scope.presentations.push({name:fileName2, origName:fileName, tenant:customerName, slide:slideNum}); 
     } 
     console.log($scope.presentations); 
    }); 
    }); 
+1

방금 ​​한 번 치는이 소켓에서 계획하기 때문에'$ scope. $ apply()'를 메서드 끝에 추가했습니다. – Houseman