2017-01-20 3 views
1

Привет, ребята У меня очень сложная проблема.AngularJs Параметр привязки к форме mdDialog

Я создал директиву многократного использования, и теперь я хочу взять значение параметра пользователя и привязать его к моей форме внутри директивы.

На стороне пользователя, они способны вызвать директиву по:

<test-app></test-app> 

Затем они могут передать в параметрах в директиву:

<test-app user-email="[email protected]"></test-app> 

OR 

<test-app user-email="{{ userEmail }} "></test-app> 
//They can take value from their own controller. 

На моих Собственных сторона по директиве, main.js:

angular.module('TestModule').controller('MainCtrl',['$mdDialog',function($mdDialog) { 
this.openDialog = openDialog; 

function openDialog(){ 
     $mdDialog.show({ 
     controller: 'DialogCtrl as dialog', 
     templateUrl: 'dialog.html' 
     }); 

    } 
    }]); 

angular.module('TestModule').directive('testApp',function(){ 
     return { 
     controller: 'MainCtrl as main', 
     scope: { 
     userEmail :'@' 

     }, 
     restrict : 'E' , 
     templateUrl : 'FormButton.html' 
    } 
    }); 

angular.module('TestModule').controller('DialogCtrl',['$mdDialog',function($mdDialog,$scope){ 

    function submit(){ 
     etc etc . . 
    } 

} 

В FormButton.html:

<md-button ng-click="main.openDialog()"> </md-button> 

На dialog.html:

<md-dialog> 
    <form> 
     etc , etc 

    <input type="email" name="email" placeholder="Email" data-ng-model="userEmail"> 
     etc , etc 
    </form> 
</md-dialog> 

Проблема: мне нужно передать в значении USEREMAIL со стороны пользователя и привязать его к виду так что, когда пользователь открывает форму, это значение есть.

Я думаю, что из-за шаблонаUrl, способ связывания модели не работает.

Что я пробовал: 1) Я попробовал ng-model для привязки, но форма находится на другой странице, так что она не смогла прочитать значение.

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

Может ли кто-нибудь помочь с этим решением?

+1

использовать 'bindToController: true' в вашей директиве. – Claies

+0

'ng-model =" user.email "' должен быть 'userEmail' –

+0

@Claies, я добавил его, но он не имеет никаких изменений на выходе –

ответ

2

Посмотрите на апи $ mdDialog docs, особенно по выбору locals.

местные жители - {object =}: объект, содержащий пары ключ/значение. Клавиши будут использоваться в качестве имен значений для ввода в контроллер.Для Например,

this.userEmail = '[email protected]'; 
function openDialog(){ 
    $mdDialog.show({ 
    controller: 'DialogCtrl as dialog', 
    templateUrl: 'dialog.html', 
    locals: { 
     email: this.userEmail // `this` is the main controller (parent). 
    } 
    }); 
} 

В HTML:

<test-app user-email="{{ main.userEmail }} "></test-app> 

DialogCtrl

angular.module('TestModule').controller('DialogCtrl', ['$mdDialog', '$scope', 'email', function($mdDialog, $scope, email) { 
    // Here you can use the user's email 
    this.userEmail = email; 
    function submit() { 
    //etc etc .. 
    } 
}]); 

В dialog.html:

<md-dialog> 
    <form> 
    <!-- etc , etc--> 

    <input type="email" name="email" placeholder="Email" data-ng-model="dialog.userEmail"> 

+0

Это работает! Но могу ли я спросить, как передать значение параметра из директивы контроллеру, чтобы я мог привязать его к this.userEmail? –

+0

Используя двустороннюю привязку, то есть используйте 'userEmail: '='' вместо 'userEmail: '@''. Это также позволяет отказаться от необходимости использования {{}}, в '' – slackmart

+0

. Я использовал userEmail: '=' и получил синтаксический анализ: ошибка lexerr. есть ли другой способ сделать это? –

0
<test-app email="[email protected]"></test-app> 

Вы передаете значение в переменной "email". Но вы не указываете эту переменную в области действия.

Попробуйте это один раз.

<test-app userEmail="[email protected]"></test-app> 
+0

ошибка типографии извините. У меня было это как адрес электронной почты пользователя на моем сайте. Есть еще идеи о том, как я могу это решить? –

Смежные вопросы