1

入力 (ディレクティブでタグ付けされている) の後に要素を挿入するディレクティブを作成しようとしていますが、挿入された要素からの入力も更新します。

angular.module('afterDir', [])
.directive('after', function ($compile) {

    return {
        require: 'ngModel',
        link: function (scope, element, attrs, ngModel) {

            scope.clickHandler = function (index) {

                console.log(index);
                ngModel.$setViewValue("something");

            }

            var content = angular.element('<ul><li ng-click="clickHandler()">after</li><li ng-click="clickHandler()">after too</li></ul>');
            content.insertAfter(element);
            $compile(content)(scope);

        }
    }
});

クリック ハンドラーは起動しますが、モデルは更新されません。モデルを更新するために他に呼び出す必要があるものはありますか? ありがとう!

4

1 に答える 1

2

$setViewValue() の後に ngModel.$render() を追加すると、必要なものが得られるはずです。

これがplunkrです。http://plnkr.co/edit/nZgMiZZD4Vna6vMb4LZr

説明のために、$setViewValue はコントローラーの内部 viewValue を更新し、必要に応じてフォームをダーティにし、内部の modelValue とモデル自体を更新します。

$render は実際にその内部の viewValue を受け取り、それを DOM にプッシュします。

于 2013-10-16T01:47:09.360 に答える