2013-04-01 15 views
5

AngularJSはモデルに特別な構文を必要としませんが、私の周りを包み込むことはできません。私はその後、場合

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; 
     } 
    }; 
}); 

私は両方が同じデータにアクセスする二つのコントローラを持っている:以下

私のDataServiceは、私が使用しているデータストレージのどんな味ラップしてください2つのビューがあり、そのうちの1つがデータを変更しますが、他のビューは自動的に更新されません。

私はノックアウト観測可能オブジェクトにしなければならないノックアウトのようなものでこれがどのように機能しているのか分かります。したがって、アプリケーションの一部の変更はサブスクリプションをトリガーし、別のビューではビューを更新します。しかし、私はAngularでそれについてどうやって行くのか分かりません。

アドバイスはありますか?

+1

data'オブジェクトスコープが同じオブジェクトへの参照を共有し、データが原始的である場合、それらは独立 – charlietfl

+2

問題は、関連する角度ではない値を保持し、http://jsfiddle.net/uGdEc/ – charlietfl

+0

を動作するJavaScript方法である '場合@charlietflまさに。ノックアウトのようなモデルレイヤーを使用するときは、観察可能となるようにすべてのオブジェクトを作成しています。そのレイヤーを削除すると、プリミティブが監視される可能性はありません(あなたのフィドルが示すように)。 – nicholas

答えて

6

私はそれが動作するように提案する変更はほとんどありません。

HTML

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

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

スクリプト

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

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

デモ入力フィールドをバインドするタイプ

  • 使用ng-modelオブジェクト文字列からの変更データオブジェクトを: Fiddle

  • +0

    オフトピック、関連、あなたは私のqを見ることができます[ここ](http://stackoverflow.com/questions/20866954/angularjs-change-controller-by-condition/20867020?noredirect = 1#20867020) –

    +1

    @RoyiNamir私はそれで戦利品を持っています...しかし、私は角の専門家ではありません –

    1

    私は同じ状況で立ち往生していませんが、私に飛びつくことはあなたがスコープに固執していることです。スコープが議論された角度の動画がありました。モデルオブジェクトをスコープに配置し、スコープをモデルオブジェクトとして使用しないでください。

    例では、文字列dataでそれぞれ2つのスコープが作成されます。 dataは文字列で不変なので、変更するとエディタのスコープ内で置き換えられます。あなたの例では、dataServiceオブジェクトを返し、そのオブジェクトがコントローラ間で共有されている場合、問題が解決される可能性があります。 dataServiceの返信を{データ:data}のmodelにして、dataの代わりにmodel.dataにバインドしてください。

    これはテストされていませんが、私がどのように角の動作を知っているかに基づいて動作する必要があります。