2016-04-06 14 views
0

İyonik Çerçeve içindeki HTML'de kullanabilmem için $ scope.notifications değerine dönmek istediğim bir işlevde dizi arr var. Bir işlev aracılığıyla bunu yapmam gerekiyor, böylece daha sonra geri dönmeden önce dizi ile birkaç eylem gerçekleştirebiliyorum. Benim denetleyicisi:

.controller('notificationsCtrl', function($scope) { 
    $scope.notifications = function(){ 
     var arr = [ 
      {user:"misterx", name:"Mister X", action:4, image: "https://www.holidaycheck.de/mediaproxy?target=hcaHR0cDovL3d3dy5ob3RlbC5kZS9tZWRpYS9ob3RlbC9waWN0dXJlcy8zMzQvMzM0MTIzL0V4dGVyaW9yXzYzNTkyNzk5NDMyODQ1OTAwMi5qcGc%3D"}, 
      {user:"misterx", name:"Mister X", action:2, image: "https://www.holidaycheck.de/mediaproxy?target=hcaHR0cDovL3d3dy5ob3RlbC5kZS9tZWRpYS9ob3RlbC9waWN0dXJlcy8zMzQvMzM0MTIzL0V4dGVyaW9yXzYzNTkyNzk5NDMyODQ1OTAwMi5qcGc%3D"}, 
      {user:"ladyx", name:"Lady X", action:1} 
     ]; 
     return arr; 
    } 
}) 

HTML: Ben bir fonksiyonu olmadan, bir dizi olarak doğrudan bildirim geçtikten sonra

<ion-item ng-repeat="msg in notifications" class="item-text-wrap"> 
    <div class="row"> 
     <div class="col-80"> 
      <strong>{{msg.name}}</strong> (<em>@{{msg.user}}</em>) {{msg.action}}. 
     </div> 
     <div class="col-20"> 
      <img src="{{msg.image}}" style="border-radius: 50px; width: 100%"> 
     </div> 
    </div> 
</ion-item> 

işe yarıyor. Burada neyi yanlış yapıyorum?

+0

"sonra üzerine dönmeden önce dizinin birkaç eylemleri gerçekleştirmek" ile ne demek istiyorsunuz? Burada bir işlev kullanmak benim için gereksiz görünüyor. – henrikmerlander

cevap

2

ng-repeat="msg in notifications"'u kullanmak, işlevinin kendisinin değil, dönüş değerini tekrar etmeyi dener. Bunun yerine işlevi çağırmak istiyorum:

<ion-item ng-repeat="msg in notifications()">

https://jsfiddle.net/dj1gpjb8/

ben işaret olmalıdır olsa da, bu yaklaşımla performans sorunlar olduğunu: Açısal tahmin edemez çünkü işlev sık adı verilecek Fonksiyonun sonucunun değişip değişmeyeceği. Bildirimleri kapsamda düz bir dizi olarak gömmek daha iyidir;

$scope.notifications = [{ 
    user: "misterx", 
    name: "Mister X", 
    //... 
    }]; 

    $scope.addNotification = function() { 
    $scope.notifications.unshift({ 
     user: "newguy", 
     name: "New Guy" 
    }); 
    // angular will notice that notifications[] has changed, and re-render the component on the next $digest 
    }; 

https://jsfiddle.net/1du593af/

-2

Aşağıdaki kod böylece işlevini kullanmaya gerek JSON formatını dönmek için geçerli olan: otomatik bileşeni tetikleyecektir daha sonra o diziyi değiştirir şey yeni değere (ler) ile yeniden işlemek için

.controller('notificationsCtrl', function($scope) { 
$scope.notifications = [ 
     {user:"misterx", name:"Mister X", action:4, image: "https://www.holidaycheck.de/mediaproxy?target=hcaHR0cDovL3d3dy5ob3RlbC5kZS9tZWRpYS9ob3RlbC9waWN0dXJlcy8zMzQvMzM0MTIzL0V4dGVyaW9yXzYzNTkyNzk5NDMyODQ1OTAwMi5qcGc%3D"}, 
     {user:"misterx", name:"Mister X", action:2, image: "https://www.holidaycheck.de/mediaproxy?target=hcaHR0cDovL3d3dy5ob3RlbC5kZS9tZWRpYS9ob3RlbC9waWN0dXJlcy8zMzQvMzM0MTIzL0V4dGVyaW9yXzYzNTkyNzk5NDMyODQ1OTAwMi5qcGc%3D"}, 
     {user:"ladyx", name:"Lady X", action:1} 
    ]; 

} 

})

+0

Zaten bunların bir dizi olarak çalıştığını biliyorlar. Bunu bir işlev olarak yapmak istiyorlar. Bu ayrıca soruda da belirtilmiştir. (Sadece kod dökümü yapmak ve "bu iş" demesi yerine, cevaplarınızı açıklamak iyi bir fikirdir). –

+0

Bunu biliyorum ama eğer fonksiyona param yoksa geçme fonksiyonuna gerek yoktur. – Amir

+0

Ben de bunu biliyorum. Ama bu onların sordukları şey değil. (Bu fonksiyona bir parametrenin * aktarılmasının * veya bu şekilde yapmak için başka iyi bir nedene sahip olmaları çok iyi olabilir, fakat sorudan iyi bir hamle yapmanın bir parçası olarak ihmal edilirler.) Eğer birisi sorarsa Biliyorum, X yapabilirim, ama neden Y çalışmıyor ", sonra" X "e cevap vermeden açıklama yapmak yardımcı olmaz. –

İlgili konular