我通常使用push方法成功地将数据添加到数组但是在弹出窗口中没有这样做,这打开了特定的Id。 这是我的代码:
<div class="form-group">
<label class="col-sm-3" for="pwd">Speciality:</label>
<div class="col-sm-4">
<input type="text" class="form-control" ng-model="spec" id="usr">
<button type="submit" ng-click="addSpeciality()">Add </button>
</div>
<div class="col-sm-5">
<ul>
<li ng-repeat="spec in speciality">
{{ spec }}
<button ng-click="removeSpeciality($index)">Remove</button>
</li>
</ul>
</div>
</div>
控制器代码:
$scope.speciality=[];
$scope.addSpeciality = function(){
$scope.speciality.push($scope.spec);
$scope.spec = '';
};
$scope.removeSpeciality = function(index) {
$scope.speciality.splice(index, 1);
};
答案 0 :(得分:0)
这是您需要Factory
的时候。忘记在控制器中存储任何数据。真的 - FORGET!在应用程序之间共享数据的唯一正确方法是定义您喜欢的Factory
并将其单独注入您将使用该数据的每个位置。
您不应将数据存储在$scope
中。 $scope
本身是绑定到DOM元素的实例。因此,只有从任何级别的深度访问任何数据才能使用$parent
这是一个很大的错误。
当您需要更改数据中的任何内容时,您的控制器应$inject
Factory
并调用相关方法。切勿在控制器中传递业务逻辑。它们就像策略设计模式 - 只有当你触发时才会告诉你应该发生什么样的业务逻辑(例如点击):
SpecialityFactory.addSpeciality = function () {
SpecialityFactory.specialities.push({});
}
SpecialityFactory.removeSpeciality = function (idx) {
SpecialityFactory.specialities.splice(idx, 1);
}
因此,在控制器之间共享业务逻辑会更容易:
// PageController
PageController.prototype.addSpeciality = function () {
SpecialityFactory.addSpeciality();
};
PageController.$inject = ['SpecialityFactory'];
// ModalController
ModalController.prototype.removeSpeciality = function (idx) {
SpecialityFactory.removeSpeciality(idx);
};
ModalController.$inject = ['SpecialityFactory'];
答案 1 :(得分:0)
好吧,首先@Apperion是对的,请阅读他的回答 但要使代码正常工作,请尝试将控制器添加到包装器HTML元素
<div class="form-group" ng-controller="ExampleController">
和
使用此数组你的ng-repeat将不会以这种方式工作,你需要使用这种方式:
<li ng-repeat="spec in speciality track by $index">