Pomyślałem, że jeśli uderzę ng-controller="GeneralInfoCtrl"
na wielu elementach w moim DOM, będą one miały ten sam $scope
(lub najmniej dwukierunkowe wiązanie nie działa).Używanie tego samego kontrolera na różnych elementach do odnoszenia się do tego samego obiektu
Powodem, dla którego chcę to zrobić, jest to, że mam różne widoki tylko do odczytu z powiązanymi dialogami modalnymi w bardzo różnych częściach kodu HTML i nie mają one wspólnego przodka (oprócz <body>
i <html>
).
Czy istnieje sposób, aby oba kontrolery odnosiły się do tego samego obiektu/sprawiają, że praca z powiązaniem danych między nimi działa?
Oto niektóre kodu dla tych, którzy kładą nacisk na widzenie znaczników, napisany w Jade:
.client-box(ng-controller="GeneralInfoCtrl")
.box-header
.box-title
h5 General Information
.box-buttons
button.btn.btn-small(data-target='#editGeneralInfo', data-toggle='modal', data-backdrop='static') <i class="icon-pencil"></i> Edit
.box-body
table.table.table-tight.table-key-value
tr
th Name
td {{client.fullName()}}
tr
th Also Known As
td {{client.aka}}
tr
th Birth Date
td {{client.birthDate|date:'mediumDate'}}
...
#editGeneralInfo.modal.hide.fade(ng-controller="GeneralInfoCtrl")
.modal-header
button.close(type='button', data-dismiss='modal') ×
h3 Edit General Information
.modal-body
form.form-horizontal.form-condensed
.control-group
label.control-label First Name
.controls
input(type='text', placeholder='First Name', ng-model='client.firstName')
.control-group
label.control-label Last Name
.controls
input(type='text', placeholder='Last Name', ng-model='client.lastName')
.control-group
label.control-label Also Known As
.controls
input(type='text', placeholder='AKA', ng-model='client.aka')
.control-group
label.control-label Birth Date
.controls
input(type='text', placeholder='MM/DD/YYYY', ng-model='client.birthDate')
...
i mój Kontroler:
function GeneralInfoCtrl($scope) {
$scope.client = {
firstName: 'Charlie',
lastName: 'Brown',
birthDate: new Date(2009, 12, 15),
...
}
}
Dziękuję. Nie można znaleźć wzmianki o '$ rootScope' w przewodniku dla programistów, ale jest w interfejsie API. Czy to naprawdę najlepsze podejście? Nie potrzebuję dostępu w innych "modułach", tylko w tym jednym kontrolerze. – mpen
Załóżmy także, że chciałbym mieć wielu klientów na jednej stronie, a kliknięcie przycisku "edytuj" obok jednego z nich użyłoby kontrolera/zakresu dla tego klienta, a nie dla globalnego/współdzielonego ... co wtedy? Być może potrzebuję trochę więcej czytania ... – mpen
Możesz mieć wiele kontrolerów, każdy z osobnym zasięgiem, na tej samej stronie. Jeśli twoja potrzeba udostępniania danych nie jest okazjonalna, powinieneś pomyśleć o używaniu "usług". Przeczytaj sekcję "Używanie kontrolerów poprawnie" w [Poradniku programisty] (http://docs.angularjs.org/guide/dev_guide.mvc.understanding_controller). – remigio