2016-04-06 14 views
0

var ben taşıdığınızda Mükemmel çalışıyorNeden rootScope <code>load</code> yöntemin dışında, bu böyle bir denetleyiciniz yetki

(function() { 
    'use strict'; 

    angular.module('myControlleringApp').controller("myController", ['$rootScope', myController]); 

    function myController($rootScope) { 
     $rootScope.status = "loading"; 

     $("#myIFrame").attr('src', "Templates/myControllerViewer.aspx"); 
     $('#myIFrame').load(function ($rootScope) { 
      // some other logic 
      $rootScope.status = "loaded"; 
     }); 
    }; 
})(); 

,

$rootScope.status = "loaded"; 

kaybeder. ama aksi halde benim görüşümün durumunu değiştirmez.

$('#myIFrame').load(function ($rootScope) { // Creates new variable in 
              // the callback's scope! 
    $rootScope.status = "loaded"; // This is now referring to the callback's 
            // parameter, not the service. 
}); 

Peki etkili yapıyoruz şudur: Burada

<div id="myControlleringAppView" data-ng-app="myControlleringApp"> 
     <div class="spinner" data-ng-show="status=='loading'"></div> 
     <div id="partialView" data-ng-show="status=='loaded'" data-ng-view="" ></div> 
    </div> 
+0

Neden '$ rootScope' için aynı denetleyiciniz var !! –

+0

@DhavalMarthak Üzgünüm seni alamadım, rootScope kullanıyorum çünkü uygulamada bazı global değişkenler var, rootScope kullanıyorum – Mathematics

+1

kullanıyorum '$ rootScope' yerine 'services 'kullanmanızı öneririm! –

cevap

1

sizin load geri aramasında $ rootScope parametresi, denetleyici enjekte birini maskeleme olduğu bazı HTML olduğunu :

$rootScope.status = "loading"; 

$('#myIFrame').load(function (randomNewParam) { 
    randomNewParam.status = "loaded"; // Not $rootScope! 
}); 

bekliyor olabilirsiniz load geri aramanıza enjekte edilmek üzere- durum bu değil! According to the jQuery docs, geri arama bu biçimde olmalıdır: şimdi parametre adları değişti

$('#myIFrame').load(function (event) { 
    $rootScope.status = "loaded"; 
}); 

Not, gerçek $rootScope yine kontrolör işlevin kapsamı edinilebilir - Bu size aradığınız işlevselliği verecek! Demek ki, Dhaval Marthak'ın yorumlarda bahsettiği gibi, uygulamanızın etrafındaki değerleri iletmek için $rootScope'u kullanmamalısınız - bu, global değişkenler oluşturmakla aynıdır. Hizmetler ve bağımlılık enjeksiyonu gitmek için yoldur.

+0

teşekkürler, burada bir şeyi özlüyorum ===> işlev parametrelerini değiştirirken herhangi bir değişiklik yapmadı :( – Mathematics

+0

Sadece bir not, daha önce yük olay geri arama için yanlış işlev imzası koydu - AJAX yük fonksiyonu ile karıştırdı var .. Yine de, parametreyi yeniden adlandırma çalışmış olmalıdır - herhangi bir konsol hataları alıyor musunuz? –

+0

hala çalışmıyor, ve konsolda da hata yok – Mathematics

İlgili konular