4

私は次のものを持っています

<table id="socialMediaContainer" class="socialMediaContainer" style="width: 100%;">
    <tbody>
        <tr ng-repeat="row in detailCollection.ChannelsInfo" 
            ng-controller="WhiteLabelSitesCtrl">
            <td><input id="txtSocialName" type="text" class="socialName"
                placeholder="Name" ng-disabled="ViewMode" maxlength="250"
                value="{{row.SocialChannelName}}" /> </td>
            <td><input id="txtSocialURL" type="text" class="txtLabel socialURL"
                placeholder="URL" ng-disabled="ViewMode" maxlength="250"
                value="{{row.SocialChannelURL}}" />
            </td>
            <td class="DragnDropIcon"></td>
            <td>
                <a class="orange " ng-show="ViewMode">Upload</a></td>
        </tr>                    
    </tbody>
</table>

ViewMode変数を更新するng-repeatの外側に別のボタンがありますが、これはng-repeat内では機能せず、ng-showでもng-disabledでも機能しません。ここで何が欠けていますか?

4

4 に答える 4

3

ngController問題は、ディレクティブをtable(少なくとも)レベルに移動する必要があるようですngRepeat。後でコントローラーで定義された配列を反復処理する場合、同じ要素にすることはできません。

<table ng-controller="WhiteLabelSitesCtrl" ... >
    <!-- ... -->
</table>

デモ: http://plnkr.co/edit/tu4TLmWIxdcYaiEd7whn?p=preview

于 2015-05-11T20:56:08.513 に答える
1

ng-repeatリピーター内の各アイテムの子スコープを作成します。

したがってviewmode、その子スコープのプリミティブ値になるため、プリミティブとして、親スコープとの継承バインディングが失われます。

ただし、コントローラースコープでオブジェクトプロパティとして宣言すると、その親オブジェクトへの参照になります。

$scope.mode ={ViewMode: false}

html の例

<a class="orange " ng-show="mode.ViewMode">Upload</a></td>
于 2015-05-11T20:55:39.643 に答える
0

スコープ内で変数の代わりにオブジェクトを渡すようにしてくださいng-repeat。代わりViewModeに、コントローラーで次のように宣言します。

$scope.model = {};

$scope.model.ViewMode = false;`.

そして、バインディングは次のようにする必要があります: <a class="orange " ng-show="model.ViewMode">. その後、すべて正常に動作します。

この記事を読んで、なぜそれが起こるのかを理解してください: https://github.com/angular/angular.js/wiki/Understanding-Scopes

于 2015-05-11T20:52:39.760 に答える