2013-12-11 61 views
0

我已經聲明的自定義指令,以檢查用戶的所有腦幹中angularjs困難而使用angularjs定製指令

var app = angular.module('myApp', []); 
app.factory('Contestant',function($http){ 
       return { 
        checkUser : function(email){ 
         return $http.post('ajax/checkuser.php',{email:email}); 
        } 
       } 
      }); 
app.directive('checkUser',function(Contestant) { 
    return { 
     require: 'ngModel', 
     link: function(scope, element, attrs,ctrl) { 
      ctrl.$parsers.unshift(function(viewValue) { 
      Contestant.checkUser(viewValue).success(function (response) { 
       ctrl.$setValidity('checkUser', true); 
       return viewValue; 
      }) 
      .error(function (data) { 
       ctrl.$setValidity('checkUser', false); 
       return undefined; 
      }); 
     }); 
     } 
    } 

}); 

HTML現在

<html ng-app="myApp"> 
<form name="signup_form" data-ng-controller="myController" novalidate> 
<input type="text" id="sponsor" name="sponsor" ng-model="sponsorID" check-user required  /> 
</form> 
</html> 

當我嘗試訪問訪問$範圍在myController中輸入sponsorID的值,它表示「undefined」

app.controller('myController', function($scope, $http, $routeParams) { 
console.log($scope.sponsorID); 
}); 

如何訪問sp的值onsorID當定製定製指令時

+0

你有沒有嘗試設置ngmodel做的指令綁定:'範圍:{...,ngModel: '=',...}' – Vinny

回答

1

解析器用於解析輸入的值,然後將其設置在模型上。例如。在輸入字段中添加了"123",但數字值123已添加到模型中。所以我認爲你濫用了這個功能,並且由於解析器永遠不會返回一個值,所以你的模型將永遠是undefined

您的checkUser返回viewValue,但這已經太遲了:解析器已經運行,並且由於缺少返回語句,模型將獲得值undefined

快速修復是在解析器函數的底部添加return viewValue;。但請注意,在Ajax請求完成之前,您的表單將被視爲有效。 (你可以將其標記爲無效調用checkUser之前解決這個問題。)

Quick fix

伊莫你不應該在這種情況下使用的解析器,而只是看模型。

scope.$watch(attrs.ngModel, function (val) { 
    // Mark the form as invalid until the check is complete 
    ctrl.$setValidity('checkUser', false); 

    Contestant.checkUser(val).then(function() { 
     ctrl.$setValidity('checkUser', true); 
    }); 
}); 

Plunker watching the model

+0

解決的問題。謝謝 – Swadesh