我試圖做一個簡單的指令,它是對象的編輯器和選擇器的組合。Angular Directive with ngScope using controllerAs
在修剪下來的例子中,用戶應該能夠在指令中編輯person
,並最終選擇一個人,該人綁定到ng-model
,以便他們參照他們選擇的人。
我的問題是我不確定將ng-model
綁定到我的控制器上的選定人員的最佳方式。
我創建了一個plunker這個位置:http://plnkr.co/edit/usWpu82VXHIE3R2vgHgv?p=preview
這裏是我的指令看起來像
angular
.module('pe')
.directive('personEditor', PersonEditorDirective);
function PersonEditorDirective() {
var directive = {
restrict: 'E',
templateUrl: 'personEditor.html',
controller: PersonEditorCtrl,
controllerAs: 'vm',
scope: {
ngModel: '='
}
};
PersonEditorCtrl.$inject = ['$scope', 'dataservice'];
return directive;
function PersonEditorCtrl($scope, dataservice) {
var vm = this;
$scope.vm = vm;
vm.people = dataservice.getPeople();
//set selected to the first
vm.person = vm.people[0];
}
}
在我的指令控制器,vm.people
是所有的人的數組。 vm.person
是當前選定的人,我希望被綁定到任何消費者傳遞的ng-model
。
使用該指令將是這樣的
<person-editor ng-model='vm.selectedPerson'></person-editor>
<span>The currently selected person is {{vm.selectedPerson.name}}</span>
在我的控制器,我知道$scope.ngModel
是,他們已經通過的對象,我可以更改或什麼,但什麼是最好/最簡單方式來獲得綁定到我的控制器的vm.person
?
我得到這種工作方式的唯一方法就是觀察select元素何時改變它的選擇,然後手動設置$scope.ngModel = vm.person
,這感覺就像是錯誤的做法。
我可以得到一些實現我想要的方法嗎?
驚人,所有的閱讀我寫了近2天進行有關指示和錯過了...感謝一堆! –
實際上遇到了奇怪的問題,現在它在plunker中工作,但在本地服務器上沒有(嘗試用貓鼬和iis express) –
您的本地源運行的是Angular 1.3嗎?你得到什麼錯誤? –