在指令中访问范围变量

时间:2015-06-08 11:58:29

标签: angularjs angular-directive

目前我有这个指令检查用户输入的用户名是否已存在于数据库中 -

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的变量以允许检查此条件。

1 个答案:

答案 0 :(得分:1)

看看这个example 任何指令都有scope变量,您可以将特定信息绑定到

  .directive('myDirective', function() {
  return {
    restrict: 'AE',
    scope: {
      initialUserName: '=name'
    },
  };
})

在您的HTML中,您可以像这样访问此属性:

<my-directive name="tom"></my-directive>

在模板方面,您可以查询名称,如

{{initialUserName.name}}