如何使用angularjs将数据推送到弹出窗口内的数组(弹出为特定id打开)

时间:2016-07-21 13:45:20

标签: javascript html angularjs

我通常使用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);
};

2 个答案:

答案 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">