0

これは私のマークアップです

    <div id="username" ng-controller="quickUserAdd">
    <h1>User</h1>
    <input placeholder="your full name" ng-model="fullname">
    <div ng-show="fullname">
        <div>
            <span class="big">Username</span>
            <span class="small">{{username()}}</span>
        </div>
        <div class="password-{{passwordStatus()}}">
            <input type="password" ng-model="password" placeholder="Password"/>
            <span class="small">{{passwordStatus()}}</span>
        </div>
    </div>
</div>

そして私のコントローラー:

    var passwordStrengths = ["weak", "medium", "ok", "great"];
    function quickUserAdd($scope)
    {
        $scope.password = "";
        $scope.fullname = "";
                   ....
    }

$scope.fullname、$scope.username、$scope.password をinstallation.user[0] (インストールはグローバル オブジェクト)にバインドする方法installation.user[0] (オブジェクトでもあります)?

4

2 に答える 2

3

あなたはグローバル変数の問題をよく知っていると確信しているので、ここでは他に選択肢がなく、ユースケースではグローバルに定義されたJavaScriptオブジェクトにアクセスする必要があると仮定します。

おそらく、あなたのケースで前進する最も簡単な方法は、installation.user[0]次のようにコントローラーのスコープでを公開することです。

function quickUserAdd($scope) {
   $scope.user = installation.user[0];
   ....
}

user次に、次のようにオブジェクトのプロパティにバインドします。

<input placeholder="your full name" ng-model="user.fullname">
<input type="password" ng-model="user.password" placeholder="Password">

このようにして、入力ボックスでの変更はすべてグローバル変数に即座に伝播される必要があります。

AngularJSの世界の外でグローバル変数を変更し、UIをまだ更新したい場合は、この変更をScope。$ apply()メソッドにラップする必要があることに注意してください。

もう1つ提案できるとしたら、通常、AngularJSコントローラーには大文字で名前を付け、Ctrlサフィックスを追加して、コントローラーに次のような名前を付ける傾向がありますQuickUserAddCtrl

于 2012-12-16T13:15:10.323 に答える
0

私が本当に必要としていたのは共有サービスでした。

これにより、コントローラー間でデータの構造を共有できます。この場合、QuickUserAdd (1 人のユーザーをすばやく追加) と UsersEditor (アプリの別のページでユーザーのリスト全体を変更) の間でユーザーを共有します。

さらに、pkozlowski.opensource のソリューション (初期化時に外部オブジェクトを参照する) を使用して、すべてのサービスを「インストール」のオブジェクトにアタッチできます。また、UI から収集されたすべてのデータを一度に読み取ることができるようにするためだけにインストール オブジェクトが必要になるため、Scope.$apply() は必要ありません。

于 2012-12-16T14:40:07.370 に答える