2016-09-28 10 views
0

私はテキストボックスの役割を持っています。役割がデータベースに既に存在するかどうかをチェックしたいのですが、私は指向性のuniqueRoleを作成しましたが、その指示にテキストボックス値を渡したいと思います。モデル値をカスタムディレクティブに渡すにはどうすればよいですか?

**HTML** 

    <input type="text" class="role-textbox" id="rolename" name="rolename" required ng-model="roledetails.name" unique-role send-value="roledetails.name" placeholder="{{::'placeholder.addRole.name'|translate}}"> 

**Controller** 

    'use strict'; 
    define([ 
     'angular', 
     './module', 
    ], function(angular, directives) { 
     directives.directive('uniqueRole', function($timeout, $q, restClientTemplate) { 
      return { 
       restrict: 'AE', 
       require: 'ngModel', 
scope:{ 
     sendValue: '=' 
     }, 
       link: function(scope, elm, attr, model) { 
        model.$asyncValidators.usernameExists = function(roledata) { 
         var defer = $q.defer(); 
         console.log("gng to call controller"); 

         restClientTemplate.execute({ 
          method: 'POST', 
          url: 'json/check/role', 
          data: roledata 

         }).then(function(response) { 
          roledata = response.results; 
          defer.resolve(roledata); 

         }, function(error) { 
          defer.reject(error); 
         }); 

         $timeout(function() { 
          model.$setValidity('usernameExists', false); 
          defer.resolve; 
         }, 1000); 
         return defer.promise; 
        }; 
       } 
      } 
     }); 
    }); 

答えて

1

基本的にカスタムディレクティブにデータを送信する方法を知りたいですか? それはケースがここにある例の場合は、ご入力の上、あなたのようなものを持っている必要があります。customDataは、現在のビューを担当していますコントローラの内部で定義されたプロパティがある

<input unique-role data="customData"> 

。プロパティは$scopeによってコントローラに接続する必要があります。

今ディレクティブ内側:

scope: { 
    data: '=' 
} 

そして、あなたはdatascopeを通じてディレクティブ内のアクセスを持っているでしょう。ディレクティブにデータをバインドする3つの方法があることに留意してください。その方法の1つは、hereについて詳しく読むことができます。

+0

あなたのコントローラ内のテキスト値に結合するディレクティブでscope.sendValueまだ値が未定義になっているのを助けてください。 –

0

HTML

<input type="text" class="role-textbox" id="rolename" name="rolename" required unique-role send-value="roledetails.name" ng-model="roledetails.name" placeholder="{{::'placeholder.addRole.name'|translate}}"> 

コントローラは、オブジェクトのプロパティを追加

scope:{ 
sendValue: '=' 
} 

私は働いていない、まだコードを編集

+0

'use strict'; は([ '角度' './module'、 ]、関数(角度、ディレクティブ){ \t directives.directive( 'uniqueRole'、関数($タイムアウトは、$ Q、restClientTemplate){ リターンを定義します{ は制限: 'AE'、 が必要 'ngModel' 範囲:{ \t sendValueを '=' \t}、 リンク:機能(範囲、ニレ、ATTR、モデル){ モデル$ asyncValidators。 usernameExists = function(roledata){\t var defer = $ q.defer(); console.log( "value o fの送信スコープは: "+ scope.sendValue); \t}それでも、定義されていないとして値を取得していました –

+0

あなたはhtmlのどこのデータをバインドしましたか? 'このように入力 –

+0

はい私は行っています –

関連する問題