2013-05-12 20 views
30

Açısalya yeniyim ve açısal olarak denetleyiciler arasında bir değişkeni nasıl paylaşabileceğimi merak ediyorum.angular.js içinde denetleyiciler arasında bir değişkeni paylaşma

function MainCntl($scope) { 
    ---code 
} 

function SearchCtrl($scope, $http) { 
    $scope.url = 'http://10.0.0.13:9000/processAdHoc'; 
    $scope.errorM = "No results";  
    $scope.search = function() { 

     $http.post($scope.url, { "data" : $scope.keywords}). 
     success(function(data, status) { 
      $scope.status = status; 
      $scope.data = data; 
      $scope.result = data; 
      alert('yes'); 
     }) 
     . 
     error(function(data, status) { 
      $scope.data = data || "Request failed"; 
      $scope.status = status; 
      alert('no'); 
      $scope.result = "failed"; 
     }); 
    }; 
} 

ındex.htm yılında

<body ng-controller="MainCntl" > 
---code 
<div ng-controller="SearchCtrl"> 
    <form class="well form-search"> 
    <div class="ui-widget"> 
      <label for="tags"></label> 
      <a ng-click="search()"><input type="image" src="../../images/search1.png" class="searchbox_submit" /></a> 
      <input ng-model="keywords" placeholder="Shadow Search" id="tags" class="input-medium search-query rounded" /> 
    </div> 
    </form> 
</div> 
---code 
<p ng-model="result"> 
    {{result}} 
</p> 
</body> 

Her şey veri göndermeyi ve bir yanıt alıyorum ajax ile iyi çalışır: Main.js yılında

- Aşağıdaki komut dosyalarını kullanıyorum , benim sorum şu şekilde:

SearchCtrl işlevinde daha sonra Index.html dosyasında başvurulan $ scope.result adlı bir değişken var. Bu değişkeni içeren html kodunu SearchCtrl denetleyicisine yerleştirirsem iyi çalışır, ancak MainCtrl denetleyicisinde ise, çalışmaz. Bu değişkeni kontrolörler arasında nasıl paylaşabilirim.

Teşekkür önde

cevap

70

bir hizmeti kullan ve her iki denetleyicileri için enjekte ve kapsam hizmetleri değişkenine vars bakın.

Örnek: Şablonunuzda

angular.module("yourAppName", []).factory("myService", function(){ 

    return {sharedObject: {data: null } } 

}); 

function MainCtrl($scope, myService) { 
    $scope.myVar = myService.sharedObject; 
} 

function SearchCtrl($scope, $http, myService) { 
    $scope.myVar = myService.sharedObject; 
} 

yapın:

{{myVar.data}} 

See an example Eğik v1.1.5 kullanır Eğer bir iç nesne koymak nedeni korumaktır

senin referanslar, "sharedObject" olmadan saklarsanız ve bu nesneyi değiştirirseniz, bağlamanız eski referansa işaret eder. nd şablonda hiçbir şey göstermez.

+0

Merhaba ShaiRez, hızlı cevap ve örnek için teşekkürler, ama ne yazık ki hala çalışmıyor ... belki de doğru şekilde uygulamıyorum. Örnekte verdiğiniz her şeyi ekledim ve ayrıca şablonu {{myVar.data}} olarak değiştirdim. İki soru ortaya çıkıyor, şablonların görünümünü değiştirmemeli ve ayrıca myVar'ı ajax çağrısının başarı/hata işlevlerine eklememeliyim? Tekrar teşekkürler, Gidon – Gidon

+1

Biraz daha okuduktan sonra $ rootScope ile bunu yapmanın daha kolay bir yolunu buldum ... Neyse ki zaman ve kudos için açısal buluşmalarda teşekkürler, ben bir sonrakiini yapmaya çalışacağım :) – Gidon

+0

@ShaiRez Kimlik doğrulama için tercih edilen model mi? Bir hizmette kimlik doğrulaması yapmak (zaten giriş yapmamışsanız) ve bir kullanıcı modelini ihtiyaç duyan tüm denetleyicilere iade etmek için? – turbo2oh

İlgili konular