-2

コントローラー内で ng-click を使用して、要素の jQuery を介して DOM オブジェクトを取得する必要があります。

HTML

<ul>
    <li ng-repeat="data in list">
        <span ng-click="editMode(this, data.id)">edit</span>
    </li>
</ul>

コントローラ

$scope.editMode = function(obj, id) {
    $(obj).hide(); //do not use jQuery hide() in angular! I's just a test!
}

変数objには要素がありますが、それを操作できません。$(obj). hide();を試してみると 何も起こりません。


編集:これは Angular で要素を非表示にする正しい方法ではありません! 例として使用されているだけです!ng-hide で要素を非表示にします。

4

2 に答える 2

4

コメントで述べたように、バッキング データ モデルが必要であり、リアクションを angular html で宣言する必要があります。

フィドルの例を次に示します。

http://jsfiddle.net/mVCkY/

<li ng-repeat="data in list">
    <span ng-click="editMode(data)" ng-hide="data.isInEditMode">edit</span>
</li>

function DataCtrl($scope) {
    $scope.list = [{}, {}, {}];
    $scope.editMode = function(obj) {
        obj.isInEditMode = true;
    };
};
于 2013-06-26T14:29:14.250 に答える
3

あなたの例では、要素ではなくthis、現在のAngular$scopeインスタンスを参照しています。要素を取得する最も簡単な方法は、イベント オブジェクトを通過することです。

<span ng-click="editMode($event, data.id)">edit</span>

次に、ハンドラーでターゲット要素にアクセスできます。

$scope.editMode = function(e, id) {
    $(e.target).hide();
};

: これは Angular では良い方法とは見なされません。関数が要素を非表示にするだけであると仮定すると、質問のコメントに記載されているようにorディレクティブをeditMode使用してそれを実現できます。ng-hideng-show

于 2013-06-26T14:06:20.453 に答える