为什么元素不是在angular中动态添加的?
why element is not added in dynamically in angular
我正在尝试使用ng-repeat
动态添加数据。我不知道为什么不加。我输入"name",这是在数据中动态添加的,但它没有显示在UI中。下面是一个示例
app.controller("studentcntr", ['$scope', function(scope) {
scope.studentDetail = [];
var student = {
name: ''
};
scope.addStudent = function() {
bootbox.prompt("Enter Name!", function(res){
if (res == null) {
} else {
student.name = res;
scope.studentDetail.push(student);
}
});
};
}])
这一行
scope.studentDetail.push(student);
是在angular之外执行的,所以angular不知道studentDetail已经被改变了。你可以使用scope.$apply()让angular检查修改
scope.$apply(function() {
scope.studentDetail.push({
name: res
});
});
代码的另一个问题是,您在控制器内部声明了一个变量student。所以每次你把它推到作用域中。studentDetail,你实际上再次推送同一个对象,这会在ng-repeat中导致错误。我在上面的代码中修改为每次
bootbox是一个外部库,它不知道angularjs有消化循环来保持视图的更新。
这里的plunkr
就像这样修改你的代码:
scope.addStudent=function(){
bootbox.prompt("Enter Name!",function(res){
if(res==null){
}else {
student.name=res;
scope.studentDetail.push(student);
}
scope.$digest(); // here is the new line to update models
});
};
可选
为了避免你以后再回来问另一个问题,你必须在bootbox
的回调函数范围内每次为student
创建一个对象,以避免在studentDetail
数组中多次推送相同的对象。
app.controller("studentcntr",['$scope',function(scope){
scope.studentDetail=[];
// I removed var student
scope.addStudent=function(){
bootbox.prompt("Enter Name!",function(res){
if (res == null) {
} else {
scope.studentDetail.push({ name: res });
}
scope.$digest(); // here is the new line to update models
});
};
}]);
相关文章:
- 如何在Google柱状图中动态添加行/列
- 使用jQuery动态添加表并在其中动态添加行
- 如何使用Angular动态添加iframe-src
- 如何向JSON数组动态添加属性
- 动态添加通过json创建的选择项
- 使用jQuery根据动态生成的html动态添加html
- 使用.on动态添加jquery/js不知道的html元素
- JS动态添加字段-删除按钮不起作用
- 动态添加AngularJS脚本
- 将表行动态添加到表或tbody元素中
- jQuery-通过AJAX调用动态添加具有值的表单元格
- 将特定属性动态添加到元素中
- 在highcharts.js中向点弹出窗口动态添加文本
- 如何在Angular.js中循环动态添加Fields并获取数据并将其发送到服务器
- 使用jQuery动态添加onClick事件
- 如何在Opencart中动态添加JavaScript
- 剑道UI下载列表:如何动态添加新元素
- 动态添加复选框和输入框 jQuery
- 动态添加哈希标记;t工作
- 将图表动态添加到组合高图表中