Javascript 拼接不适用于Angularjs

Javascript 拼接不适用于Angularjs,javascript,angularjs,ionic-framework,Javascript,Angularjs,Ionic Framework,我现在尝试制作能够添加、编辑和删除的项目列表表单。 “添加”和“编辑”都可以正常工作,但是,当我尝试删除它时,它并没有按预期工作 这里是我的部分代码,由删除按钮组成 <!-- Added Items Stage --> <div ng-repeat-start="item in items" ng-form="editItemForm" class="row"> <div class="col"> &

我现在尝试制作能够添加编辑删除的项目列表表单。 “添加”和“编辑”都可以正常工作,但是,当我尝试删除它时,它并没有按预期工作

这里是我的部分代码,由删除按钮组成

      <!-- Added Items Stage -->
      <div ng-repeat-start="item in items" ng-form="editItemForm" class="row">
        <div class="col">
          <input type="text" name="description" ng-model="item.description" placeholder="description" required>
        </div>
        <div class="col">
          <input type="number" name="quantity" pattern="\d*" ng-model="item.quantity" placeholder="quantity" required>
        </div>
        <div class="col">
          <input type="text" name="price" ng-model="item.price" placeholder="price" required>
        </div>
        <div class="col">
          <select name="taxType" ng-model="item.taxType" required>
            <option value="ZR">ZR</option>
            <option value="SR">SR</option>
          </select>
        </div>
        <div class="col col-20" ng-bind="(item.quantity&&item.price)?((item.quantity*item.price) | currency:''):'0.00'"></div>
        <div class="col col-10">
          <button type="button" class="button button-assertive button-clear icon ion-close-circled" ng-click="deleteItem(item)"></button>
        </div>
      </div>

      <hr ng-repeat-end>
我尝试传入
$index
,或使用
删除
而不是拼接,但仍然无法工作。请帮帮我。多谢各位

这是我的


注意:我认为该项已删除,但html未更新。

当Angular不知道对模型进行了更改时,有时会发生这种情况。在这种情况下,您可以通过将函数包装在
$timeout
中而不延迟地强制更新:

$scope.deleteItem = function(item) {
    $timeout(function () {
        $scope.items.splice($scope.items.indexOf(item), 1);
    });
};

不要忘了将
$timeout
服务注入控制器。

我不太明白为什么?但是中继器上的ng表单属性存在问题

如果你删除它-所有的工作

var-nameApp=angular.module('starter',['ionic','ngMessages']);
nameApp.config(函数($stateProvider,$urlRouterProvider){
$stateProvider
.state('auth'{
url:“/auth”,
templateUrl:'auth.html',
})
.州(“家”{
url:“/home”,
templateUrl:'home.html',
控制器:“HomeCtrl”
});
$urlRouterProvider。否则(“/auth”);
});
nameApp.directive('isolateForm',[function(){
返回{
限制:“A”,
要求:“?表格”,
链接:函数(范围、elm、属性、ctrl){
如果(!ctrl){
返回;
}
//复制控制器
var ctrlCopy={};
角度复制(ctrl、ctrlCopy);
//获取窗体的父级
var parent=elm.parent().controller('form');
//删除指向控制器的父链接
父项$removeControl(ctrl);
//用“隔离窗体”替换窗体控制器
var隔离FORMCTRL={
$setValidity:函数(validationToken、isValid、control){
ctrlCopy.$setValidity(validationToken、isValid、control);
父项.$setValidity(validationToken,true,ctrl);
},
$setDirty:function(){
elm.removeClass('ng-pristine').addClass('ng-dirty');
ctrl.$dirty=true;
ctrl.$pristine=false;
},
};
角度扩展(ctrl,isolatedFormCtrl);
}
};
}]);
控制器('AuthCtrl',函数($scope,$state){
$scope.newItem={
说明:未定义,
数量:未定义,
价格:未定义,
分类类型:未定义
};
$scope.items=[];
$scope.addItem=函数(){
console.log({
description:$scope.newItem.description,
数量:$scope.newItem.quantity,
价格:$scope.newItem.price,
taxType:$scope.newItem.taxType
});
$scope.items.push({
description:$scope.newItem.description,
数量:$scope.newItem.quantity,
价格:$scope.newItem.price,
taxType:$scope.newItem.taxType
});
log($scope.items);
$scope.newItem.description=未定义;
$scope.newItem.quantity=未定义;
$scope.newItem.price=未定义;
$scope.newItem.taxType=“SR”;
};
$scope.deleteItem=函数(项){
$scope.items.splice($scope.items.indexOf(item),1);
};
$scope.authorization={
引用号:“”,
};
$scope.signIn=函数(形式){
如果(表格$valid){
$state.go('home');
}
};
});
nameApp.controller('HomeCtrl',函数($scope){
});
。错误容器{
保证金:5px0;
}
.error容器:最后一个子容器{
保证金:5px0;
}
.错误{
填充:10px 16px;
字体系列:“Arial黑色”,小工具,无衬线;
字体大小:11px;
文本转换:大写;
颜色:#555;
垂直对齐:中间对齐;
}
.错误一{
字体大小:24px;
颜色:#B83E2C;
垂直对齐:中间对齐;
}
.last error container>。错误{
填充:10px 16px 0;
}
.有错误{
边框底部:3px实心#B83E2C;
}
1.没有错误{
底部边框:3倍纯绿;
}

返回
表单验证示例
参考号 描述 量 价格 税种 数量 锆 SR
锆 SR 提交 惠康 无效的货币格式! 此字段必填! 此字段的最小长度为5个字符! 此字段的最大长度为20个字符!
使用索引代替项目

<button type="button" class="button button-assertive button-clear icon ion-close-circled" ng-click="deleteItem($index)"></button>

遇到同样的问题;“接头不工作”。在我的情况下,我必须解决如下,以防万一,如果它有助于某人

如果您处理的是对象,请注意“indexOf”适用于数组,而不是数组中的对象。您可以执行以下操作来识别索引并处理此情况

$scope.removeReport = function(report) {
    var index = $scope.contact.reports.map(function(r) { return r.id;}).indexOf(report.id);
        if (index >= 0) {
          $scope.contact.reports.splice(index, 1);
        }
}
T
$scope.deleteItem = function(index) {
    $scope.items.splice(index, 1);
};
$scope.removeReport = function(report) {
    var index = $scope.contact.reports.map(function(r) { return r.id;}).indexOf(report.id);
        if (index >= 0) {
          $scope.contact.reports.splice(index, 1);
        }
}