2016-07-15 7 views
0

У меня есть контроллер, который занимается заказами на поставку. Он имеет номер заказа на поставку.Как передать переменные контроллеру sibling

Я запускаю форму в диалоговом окне, которое имеет свой собственный контроллер.

Мне нужно показать номер заказа на поставку с контроллера PO в этом диалоговом окне Третий поле ввода в диалоговом окне. Каков правильный/рекомендуемый способ сделать это?

Я стараюсь придерживаться лучшей практики и руководства по стилю от Джона Папы ниже.

Спасибо.

index.html 
<!DOCTYPE html> 
<html> 

<head> 
    <script data-require="[email protected]*" data-semver="3.0.0" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0/jquery.js"></script> 
    <script data-require="[email protected]" data-semver="1.5.3" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.3/angular.min.js"></script> 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/ng-dialog/0.6.2/js/ngDialog.min.js"></script> 
    <link rel="stylesheet" href="style.css" /> 
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ng-dialog/0.6.2/css/ngDialog-theme-default.min.css"> 
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ng-dialog/0.6.2/css/ngDialog.min.css"> 
    <script src="script.js"></script> 
</head> 

<body ng-app="app"> 
    <h1>Hello Plunker!</h1> 
    <div ng-controller="POController as po"> 
    {{po.purchaseOrderNumber}} 
    <button ng-click="po.openDialog()">OPEN DIALOG</button> 
    </div> 


</body> 

</html> 

POLine.html

<div> 
    <div>POLINE</div> 
    <div> 
    <input type="text" ng-model="poline.lineNumber"> 
    </div> 
    <div> 
    <input type="text" ng-model="poline.desc"> 
    </div> 
    <div> 
    <input type="text" ng-model="po.purchaseOrderNumber"> 
    </div> 
    <div></div> 
</div> 

script.js

(function() { 

    angular 
    .module('app', ['ngDialog']) 
    .controller('POController', ['ngDialog', POController]) 
    .controller('POLineController', [POLineController]) 


    function POController(ngDialog) { 
    po = this; 
    po.purchaseOrderNumber = "ORD1234" 
    po.openDialog = openDialog; 

    function openDialog() { 
     ngDialog.open({ 
     template: 'POLine.html', 
     className: 'ngdialog-theme-default', 
     controller: 'POLineController', 
     controllerAs: 'poline' 
     }); 
    } 

    } 

    function POLineController() { 
    poline = this; 

    poline.lineNumber = "POLINE12345"; 
    poline.desc = "THIS IS A DESCRIPTION"; 

    } 


})(); 

ответ

0

впрыснуть в контроллер с помощью диалогового окна Решимость свойство ngDialog.open(), как это :

ngDialog.open({ 
    template: 'POLine.html', 
    className: 'ngdialog-theme-default', 
    controller: 'POLineController', 
    controllerAs: 'poline', 
    resolve: { 
    poNumber: function() { 
     return po.purchaseOrderNumber; 
    } 
    } 
}) 

Тогда в POLineController:

function POLineController(poNumber) { 
    poline = this; 

    poline.lineNumber = poNumber; 
    poline.desc = "THIS IS A DESCRIPTION"; 

} 

UPDATE

Вот рабочий plunk

+0

Спасибо за помощь, но, к сожалению, я не смог получить ни один из этих примеров, работающих после нескольких часов. Можете ли вы обновить плункер? Я занимаюсь этим всю ночь и не смог заставить его работать успешно. Спасибо снова. – McDuff

+0

Спасибо за помощь. выясняется, что проблема была глупой: .controller ('POLineController', [POLineController]); должен был быть .controller ('POLineController', POLineController); ваш плункер сортировал это. Спасибо – McDuff

0

Лучший способ в этом случае будет проходить в отношении каких-либо данных, используя data недвижимость , Это позволит вам получить доступ к данным с использованием объекта ngDialogData в шаблоне.

script.js

function POController(ngDialog) { 
    po = this; 
    po.purchaseOrderNumber = "ORD1234" 
    po.openDialog = openDialog; 

    var data = { purchaseOrderNumber: po.purchaseOrderNumber }; 

    function openDialog() { 
     ngDialog.open({ 
     template: 'POLine.html', 
     className: 'ngdialog-theme-default', 
     controller: 'POLineController', 
     controllerAs: 'poline', 
     data: data 
     }); 
    } 

    } 

POLine.html

<div> 
    <div>POLINE</div> 
    <div> 
    <input type="text" ng-model="poline.lineNumber"> 
    </div> 
    <div> 
    <input type="text" ng-model="poline.desc"> 
    </div> 
    <div> 
    <input type="text" ng-model="poline.ngDialogData.purchaseOrderNumber"> 
    </div> 
    <div></div> 
</div> 

Обратитесь к documentation для более подробной информации.

+0

Спасибо за помощь. Я прочитал документацию и попробовал множество примеров, но по какой-то причине я не могу получить эту работу, используя любой из этих методов. Я могу заставить его работать, не используя эти функции, используя службу для передачи переменных, но я хочу, чтобы это приложение было применено к лучшей практике, и эти методы выглядят более «законными», чем путь общей службы. – McDuff

+0

@McDuff - я создал плунж из вашего кода с моими предлагаемыми ревизиями, и он работает отлично. Проверьте ссылку, которую я добавил в свой ответ. Одно дополнение к вашему коду заключается в том, что я ввел ngDialog в POController. – jbrown

+0

@McDuff Можете ли вы отказаться от чего-то большего, чем просто сказать нам, что это не работает? Можете ли вы предоставить какие-либо ошибки, журналы или обновленный код? Может быть, настроить аналогичный пример на JSFiddle? – 10100111001

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

  • Нет связанных вопросов^_^