2013-04-01 17 views
5

bağlayıcı iki yönlü veri Ben angularjs gerektirmez ve Modeller için özel bir sözdizimi etmediğini gibi, ama ben kafamı sarmak gibi olamaz bir senaryo var. Sonra ben ise

app.controller('display', function($scope, dataService) { 
    $scope.data = dataService.getData(); 
}); 

app.controller('editor', function($scope, dataService) { 
    $scope.data = dataService.getData(); 
}); 

:

app.factory('dataService', function() { 
    var data = 'Foo Bar'; 

    return { 
     getData: function() { 
      return data; 
     } 
    }; 
}); 

ben hem aynı veri parçasını erişmek iki denetleyicileri var: Ben kullanıyorum veri depolama aşağıdaki

Benim DataService sargıları

ne olursa olsun lezzet alın Biri verileri değiştiren iki görüşe sahip, neden diğer güncelleme otomatik olarak yapılmıyor? Bu Verileri bir nakavt gözlemlenebilir nesne yapmak kullanmak zorunda kalacağım Knockout gibi bir şey nasıl çalıştığını

<div ng-controller="display"> 
<p>{{data}}</p> 
</div> 

<div ng-controller="editor"> 
<input type="text" value="{{data}}"/> 
</div> 

anlıyorum. Bu nedenle, uygulamanın bir bölümünde yapılan tüm değişiklikler abonelikleri tetikler ve başka birindeki görünümleri günceller. Ama ben bunu Angular'da nasıl yapacağına emin değilim.

Herhangi bir öneri?

+1

, veri ilkel olduğu zaman, bunlar değeri, bağımsız bir şekilde – charlietfl

+2

giderme, http://jsfiddle.net/uGdEc/ – charlietfl

+0

çalışır JavaScript, alakalı köşelidir değildir korumak @charlietfl Tam olarak. Nakavt gibi bir model katmanı kullanırken, gözlemlenebilir olması gereken her şey için nesneler yaratıyorsunuz. Bu katmanı kaldırın ve ilkellerin nasıl izlenebileceğini mantıklı görünmüyor (kemanın gösterdiği gibi). – nicholas

cevap

6

Ben o iş yapmak öneririm birkaç değişiklik vardır.

  1. değişiklik bir dize veri nesnesi giriş sahadan

HTML

<div ng-controller="display"> 
    <p>{{data.message}}</p> 
</div> 

<div ng-controller="editor"> 
    <input type="text" ng-model="data.message"/> 
</div> 

Komut bağlama tipi

  • Kullanım ng-model itiraz

    app.factory('dataService', function() { 
        var data = {message: 'Foo Bar'}; 
    
        return { 
         getData: function() { 
          return data; 
         } 
        }; 
    }); 
    

    Demo:`Data` nesne kapsamları aynı nesneye başvuru paylaşacak

  • +0

    konu dışı, ilgili, lütfen benim q [burada] görebilirsiniz (http://stackoverflow.com/questions/20866954/angularjs-change-controller-by-condition/20867020?noredirect = 1 # 20867020) –

    +1

    @RoyiNamir Ona bir ganim var ... ama ben açısal bir uzman değilim –

    1

    aynı durumla sıkışmış edilmemiştir, ama bana atlar şey kapsamında yapışmasını budur. Kapsamın tartışıldığı açısal bir video vardı. Model nesnelerini kapsam içine almalı ve kapsamı model nesnesinde kullanmamalısınız. Örnekte

    iki kapsamları dize data her oluşturulur. data bir dize ve değişmez olduğundan, değiştirildikten sonra editörün kapsamına alınacaktır. Örneğinizde dataService bir nesne döndürdüyseniz ve bu nesne denetleyiciler arasında paylaşılıyorsa, o zaman sorunlarınız çözülecektir. {Veri: data} arasında dataService dönüşü model sahip deneyin ve model.data yerine data bağlanır.

    Bu denenmemiş, ama açısal çalıştığını biliyorum nasıl dayanan çalışması gerekir.