3

on-blur入力フィールドからぼかすユーザー向けのディレクティブを作成しました

<input type="text" on-blur="doSomething({{myObject}})">

myObjectは次のようになります。

myObject = {a : foo, b : bar ... }

これは私のディレクティブが現在どのように見えるかです:

    myModule.directive('onBlur',function(){
    return {
        restrict: 'A',
        link: function(scope,element,attrs) {
            element.bind('blur',function(){
                console.log('blurrred');
            });

        }
    }
});

ぼかしイベントがトリガーされたときに関数doSomething({{myObject}})を実行するにはどうすればよいですか?

私はうまくいかなかったこのようなことをしようとしました:

...
            element.bind('blur',function(){
                console.log('blurrred');
                doSomething(object);
            });
...
4

2 に答える 2

2

ng-blurにscopeがありません。$apply。コールバック関数への参照はなく、コールバック関数は現在のスコープで定義する必要があります。

JS:

var app = angular.module('plunker', []);
app.controller('AppController',
    [
      '$scope',
      function($scope) {
        $scope.myObject = {a: 'foo', b: 'bar'};

        $scope.doSomething = function(item){
          console.log(item);
        };
      }
    ]
  );

app.directive('ngBlur', function() {
  return function( scope, elem, attrs ) {
    elem.bind('blur', function() {
      scope.$apply(attrs.ngBlur);
    });
  };
});

HTML:

<div ng-controller="AppController">
  <input ng-blur="doSomething(myObject)" />  
</div>

働くプランカー

于 2013-03-11T13:01:16.953 に答える
2

リンク関数内で呼び出すことができます:scope.doSomething()。式を評価するには、次のように実行できます。scope.$eval(expression)スコープオブジェクトにアクセスするには、次を使用しますscope.myObject

もちろん、これは、単独で機能しないディレクティブにのみ当てはまります。

于 2013-03-11T12:57:40.977 に答える