2016-03-25 20 views
0

Şimdi web sitesi geliştiriyorum ve ng-repeat içinde düzenleme not alanı özellikleri vardır. Not alanını düzenlemek için kullanıcının önce formu görüntülemek için bağlantıyı tıklaması ve ardından içeri giriş yapması ve ardından onu takip etmesi gerekir. Sorun, başarıyla kaydedildikten sonra bu girişi gizleyemem. Kodlama aşağıdaki gibidir.angularjs gönderildikten sonra formu gizlemek nasıl

index.jade

tr(data-ng-repeat="application in job.applications") 
    td.notes 
     div.bold #{getMessage('Notes:')} 
     div.normal 
      div(ng-hide='showDetails') 
       {{application.note}} 
       .br 
       a.admin_edit_gray(href='#', ng-click="showDetails = ! showDetails") Edit Note 
      div(ng-show='showDetails') 
       textarea.form-control.small-text-font(ng-model='editableTitle', ng-show='showDetails', maxlength="100", ng-trim="false") 
       div.editable 
        div(ng-if="editableTitle.length == 100") 
         | #{getMessage('max 100 symbols.')} 
       a.small-text-editButton(href='#', ng-click='save(application, editableTitle, application.id)') Save 
       | | 
       a.small-text-cancelButton(href='#', ng-click="showDetails = ! showDetails") close 

controller.js

$scope.showDetails = false;   
$scope.noteFormData = {}; 
$scope.save = function(application, editableTitle, appId) { 
    $scope.noteFormData = { 
     appId: appId, 
     note: editableTitle 
    }; 
    mytestService.writeNote($scope.noteFormData).then(
     function (notemessage) { 
      application.note = notemessage; 
      alert('Note is successfully saved.'); 
      $scope.showDetails = false; 
     } 
    ); 
}; 

Ben başarıyla kaydedildi sonra $scope.showDetails = false; formu gizlemek için çalıştık. Ama hiç işe yaramıyor. Lütfen bu sorunun nasıl çözüleceğine bana yardımcı olun.

+0

bir '$ timeout' içinde' $ scope.showDetails = FALSE kaydırma deneyin, bir sindirmek sorun olabilir. –

+0

'WriteNote',' $ http' kullanarak sunucunuzdaki güncellemeleri göndermek için bazı AJAX çağrıları yapıyor mu? – Arkantos

+0

@Arkantos yap, elbette. Bu async çağrı. – ppshein

cevap

1

ngRepeat'ın $ kapsamı içinde showDetails oluşturuyorsunuz. Döngünün her yinelemesi, denetleyicinin $ kapsamının yeni bir $ kapsamını oluşturur.

Bu sayede, denetleyiciden $ scope.showDetails ayarlayın.

sen iterated ediliyor nesneye referans almak ve ayrıntıları göster ayarlamak gerektiğini saptamak amacıyla:

yerine:

ng-click="showDetails=!showDetails" 

Kullanım:

ng-click="application.showDetails=!application.showDetails" 

Bundan sonra gönderirken, doğru referansı kullanarak göstermek veya gizlemek istediğinizi seçebilir veya dizinin tüm itenslerini yineleyip showDetails öğesini false olarak ayarlayabilirsiniz.

$scope.showDetails = false; 

Kullanımı: Yerine

application.showDetails = false; 
+0

İyi bir açıklama ve örnek. Bunu takdir ediyorum. – ppshein

0

denetleyicide bir değişken ayarlayın ve değerini false olarak ayarlayın. Save() işleviniz bittikten sonra bu değişkeni doğru olarak ayarlayın. Ve görünüm sayfasında, true değerindeyse ng-show'un bir durumu kondu.

+0

söylediklerim yaptığım şeyle aynı. – ppshein

İlgili konular