0

これに似たAngularのディレクティブがあります:

.directive('forexample', function() {
    return {
        restrict: 'A',
        require: 'ngModel',
        link: function(scope, elm, attrs, ctrl) {
        elm.on('click', function() {
            scope.$apply(function () {
            ctrl.$setViewValue('value');

次のようなものから呼び出されます。

<button forexample ng-model="mymodel">Do It</button>

だから明らかに

$scope.mymodel; // equals value

私が欲しいのは、 push('value'); です。ディレクティブからモデルに追加されるため、最後に「Do It」を数回クリックすると、次のようになります。

$scope.mymodel; // equals array('value,'value','value');
4

2 に答える 2

1

コントローラは通常、ngModel双方向データバインディングがそのフルパワーを示す入力タイプのディレクティブで使用されます。しかし、あなたの例から判断すると、あなたの場合、の完全な機械はngModel必要ないかもしれません。あなたの例は、機能的に言​​えば、あなたがやろうとしていることを説明していないので、クリックイベントに応答して配列に値をプッシュしたいと仮定しています。もしそうなら、これにアプローチする最も簡単な方法は$eval、スコープでメソッドを使用することです。

.directive('forexample', function() {
    return {
      link: function(scope, elm, attrs, ctrl) {
        var modelArray = scope.$eval(attrs.forexample);

        elm.bind('click', function() {            
            scope.$apply(function () {
              modelArray.push('value');
            });
        });
      }
    };
  });

上記のディレクティブは、次のようなテンプレートで使用できます。

<button forexample="somearray">Do It</button>

そして、ここに作業プランクがあります:http://plnkr.co/edit/xc5mui9xbxIWHxcvAjqR?p= preview

于 2013-01-28T08:42:31.010 に答える
1

がすでに$scope.mymodel配列として定義されている場合、次のように動作するはずです。

app.directive("forexample", function() {
  return function( scope, elm, attrs ) {
    elm.bind("click", function( evt ) {
      scope.$apply(function( scope ) {
        scope[ attrs.ngModel ].push('value');
      });
    });
  };
});
于 2013-01-28T06:12:00.827 に答える