目前我有这个指令检查用户输入的用户名是否已存在于数据库中 -
app.directive('usernameAvailable', function ($timeout, $q, userService, authService) {
return {
restrict: 'AE',
require: 'ngModel',
link: function (scope, elm, attr, model) {
model.$asyncValidators.Username = function () {
var User = {
Username: model.$viewValue
}
var defer = $q.defer();
var promiseGet = userService.DoesUsernameExist(User);
promiseGet.then(function (result) {
scope.$emit('updateUsername', model.$viewValue);
if (result.data == true) {
model.$setValidity('Username', false);
} else {
model.$setValidity('Username', true);
}
},
function (errorResult) {
console.log('Unable to check if the username exists', errorResult);
});
return defer.promise;
};
}
}
});
这样可行,但我的问题是,当您尝试编辑用户时,它会说已经使用了用户名,因为它已经存在于数据库中。我想传递一个变量($ scope.InitialUsername),这样我就可以在我的指令中添加一个条件,在编辑用户时允许用户名等于此。
这也意味着传入editmode的变量以允许检查此条件。
答案 0 :(得分:1)
看看这个example
任何指令都有scope
变量,您可以将特定信息绑定到
.directive('myDirective', function() {
return {
restrict: 'AE',
scope: {
initialUserName: '=name'
},
};
})
在您的HTML中,您可以像这样访问此属性:
<my-directive name="tom"></my-directive>
在模板方面,您可以查询名称,如
{{initialUserName.name}}