如何将模型值传递给自定义指令?

时间:2016-09-28 08:10:30

标签: angularjs

我有一个文本框角色,我想检查角色是否已存在于数据库中,或者是否已存在于服务器端,因为我已经创建了一个指令uniqueRole,现在我想将文本框值传递给该指令,如何做到这一点。 / p>

**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;
                    };
                }
            }
        });
    });

2 个答案:

答案 0 :(得分:1)

您基本上想知道如何将数据发送到自定义指令? 如果是这种情况,这是一个例子,在你的输入上你应该有:

<input unique-role data="customData">

其中customData是在您的控制器内定义的属性,负责当前视图。该属性应通过$scope附加到您的控制器。

现在在指令中:

scope: {
    data: '='
}

您可以通过scopedata访问指令。请记住,有三种方法可以将数据绑定到指令,这是其中一种方法,您可以阅读更多关于它的信息{。{3}}。

答案 1 :(得分: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}}">

Controller在对象中添加属性

scope:{
 sendValue: '='
}

指令中的scope.sendValue将绑定到控制器中的文本值