2016-07-21 6 views
0

私はぼかしのディレクティブから要素を更新しようとしていますが、モデルだけでなくビューも変更されています。私は問題を強調シンプルplunk作成したAngularディレクティブからモデルを更新

app.directive('myDirective', function() { 
    return { 
    require: 'ngModel', 
    link: function(scope, element, attrs, ctrl) { 
     element.bind('blur', function(e) { 
     element[0].value = 'new val'; 
     }); 
    } 
    }; 
}); 

:人の https://plnkr.co/edit/yicenDSHNagapXxP7yrF?p=preview

多くは、この問題を持っているようだと上の機能を使用して、特定のモデルを変更する方法についてのアドバイスがたくさんあります範囲。しかし、私はこの指示を任意の入力にドロップできるようにしたいので、変更するモデルはここでは機能しません。

ここで説明したように$ applyを使用しようとしましたが、それも機能しません。 http://nathanleclaire.com/blog/2014/01/31/banging-your-head-against-an-angularjs-issue-try-this/。私は何が欠けていますか?

おかげで、

答えて

1

これを試してみてください(plunker):

var app = angular.module('myApp', []); 
app.controller('myCtrl', ['$scope', function($scope) { 

    $scope.myVal = 'Demo'; 

}]); 

    app.directive('myDirective', function() { 
     return { 
     require: '^ngModel', 
     scope:{ngModel:'='}, 
     link: function(scope, element, attrs, ctrl) { 
      element.bind('blur', function(e) { 
      scope.ngModel='new val'; 
      scope.$apply(); 
      }); 
     } 
     }; 
    }); 
+0

パーフェクト! ngModelが必要なときの '^'は何ですか?それはそれと一緒に、またはなしで動作します –

+0

これは、ディレクティブが動作するためには、 'myDirective'と同じ要素に値を持つngModel属性が必要であることを意味します。このようにして、リンク関数の 'ctrl'パラメータはngModelControllerに反映されます。詳細はここをクリック[NgModelController](https://docs.angularjs.org/api/ng/type/ngModel.NgModelController) –

関連する問題