試圖找到AngularJS的最佳實踐。這裏的交易:AngularJS - 如何在控制器之間共享功能
有兩種不同的頁面與形式,其中每個人都有自己的表單字段。但是這兩種表單都有一個共同的功能:它們有一個自動填充字段,用戶可以使用該字段來選擇系統中存在的多個電子郵件地址。
選定的電子郵件地址被存儲到模型/範圍,以便它們可以顯示在HTML頁面上。這裏有一個例子:
<div ng-controller="MyCtrl">
<form ng-submit="selectCurrentEmail()" novalidate>
<input type="text"
class="form-control"
ng-model="responsiblePerson" />
<input type="submit" value="Add" />
<div ng-repeat="email in formData.selectedEmails">
<div>
{{email}} <a href="" ng-click="removeEmail(email)">x</a>
</div>
</div>
</form>
</div>
和angularjs部分:
var myApp = angular.module('myApp', []);
function MyCtrl($scope) {
$scope.formData = {selectedEmails: []};
$scope.selectEmail = function(email) {
if (email != null && $.inArray(email, $scope.formData.selectedEmails) == -1) {
$scope.formData.selectedEmails.push(email);
$scope.responsiblePerson = null;
}
};
$scope.removeEmail = function(email) {
var index = $.inArray(email, $scope.formData.selectedEmails);
if (index != -1) {
$scope.formData.selectedEmails.splice(index, 1);
}
};
$scope.selectCurrentEmail = function() {
$scope.selectEmail($scope.responsiblePerson);
};
}
(不包含自動完成,因爲這不是主要的問題在這裏..)
這一切正常,但我不想在兩個控制器中重複相同的邏輯。我想要的是一個服務或基本控制器,可以負責設置和刪除選定的電子郵件地址。當用戶完成時,範圍將只包含選定的電子郵件地址。
那麼,你認爲有一個很好的方法來推廣範圍內的三個功能?任何想法使這更好?
如您所見,爲自動填充字段編寫一個指令模塊,該模塊可以保存爲角度服務 – Sprottenwels
[可以使用一個控制器在AngularJS中調用另一個控件嗎?](http://stackoverflow.com/questions/9293423/can -one-controller-call-another-in-angularjs) – Stewie
使用服務在這裏是更好的選擇 – BKM