5

質問の言い方がわからないので、より良いものを思いつくことができれば編集してください。次のディレクティブがあります。

app.directive('foo', function() {
    return {        
        restrict: 'A',
        require: "?ngModel",
        link: function (scope, element, attrs, controller) {
            scope.$watch(attrs.ngModel, function () {
                console.log("Changed to " + scope[attrs.ngModel]);
            });
        }
    };
});

私がこれを持っているとき、それはうまく機能し、適切にログに記録します

<input type="text" ng-model="bar" />

app.controller('fooController', function($scope) { 
    $scope.bar = 'ice cream';
});

この方法で試してみるとうまくいきません。「未定義に変更」をログに記録し続けます

<input type="text" ng-model="model.bar" />

app.controller('fooController', function($scope) { 
    $scope.model = { bar: 'ice cream' };
});

両方のシナリオで機能させるにはどうすればよいですか。angularは両方を使用できるので、正しいことのようです。

4

2 に答える 2

11

ngModel ディレクティブを調べたところ、ngModelGet という関数が見つかりました。$parse を使用します。

app.directive('foo', function($parse) {
    return {        
        restrict: 'A',
        require: "?ngModel",
        link: function (scope, element, attrs, controller) {
            var ngModelGet = $parse(attrs.ngModel);

            scope.$watch(attrs.ngModel, function () {
                console.log("Changed to " + ngModelGet(scope));
            });
        }
    };
});
于 2013-11-14T07:43:06.187 に答える