Как я могу отправить ссылку на угловую директиву модели, а не скопировать

0

Я использую директиву так:

.directive('inputExtended', function() {
        //input with extra expression, when expression is true in right side we show success image, else we show error image
        // use this directive in <form>
        return {
            restrict: 'E',
            templateUrl: 'templates/input-extended.html',
            replace: true,
            scope: {
                success: '=success',
                error: '=error',
                inputModel: '=inputModel',
                value: '=value',
                name: '=name'
            }
        }
    })

Я использую эту директиву следующим образом:

<input-extended name="'username'" inputModel="LoginCtrl.username" value="'username' | translate" success="!form.username.$error.required && form.username.$dirty" error="form.username.$error.required && form.username.$dirty"></input-extended>

Код директивы:

<div>
<input ng-click="test()" type="text" name="{{name}}" ng-model="inputModel" placeholder="{{value}}" required />
<div class="error" ng-if="error">
    <img src="../img/error.png">
</div>
<div class="success" ng-if="success">
    <img src="../img/success.png">
</div>

Но когда я использую эту директиву, для указания углового не отправляйте оригинальную ссылку на LoginCtrl.username. Как отправить оригинальную ссылку?

Теги:
angularjs-directive

1 ответ

0

Делая это:

        scope: {
            success: '=success',
            error: '=error',
            inputModel: '=inputModel',
            value: '=value',
            name: '=name'
        }

Вы создаете новую изолированную область, которая копирует объекты и добавляет часы в обе области (родительский и дочерний) для обработки двунаправленной привязки.

К сожалению, вы не можете передать ссылку своего объекта на новую изолированную область. Что вы можете сделать, это сохранение переменной в службе, а затем предоставление вашей директивы некоторым параметрам для получения переменной.

например:

директива:

service-name="loginService" service-method="getLoginInfo"

добавьте это в свой объем:

        scope: {
            success: '=success',
            error: '=error',
            inputModel: '=inputModel',
            value: '=value',
            name: '=name'
            serviceName: '@',
            serviceMethod: '@'
        }

И затем, в контроллер:

    return {
        restrict: 'E',
        templateUrl: 'templates/input-extended.html',
        replace: true,
        scope: {
            //
        },
        controller: ["$injector", function($injector){
            var service = $injector.get($scope.serviceName);
            $scope.someObject = service[$scope.serviceMethod]();
        }]
    };

но мне это совсем не нравится.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню