Javascript Angular指令未获取更新的控制器数据
我有一个表单,其中一个select是一个字段,数据来自后端生成的数组 我遇到的问题是控制器有一个空数组来存储数据。 然后通过对后端的请求填充此阵列。唯一的问题是指令没有使用更新的数据,它只使用在控制器上创建的空数组 我使用了随附的plunkr中的此指令 setTimeout就像我的ajax调用一样Javascript Angular指令未获取更新的控制器数据,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我有一个表单,其中一个select是一个字段,数据来自后端生成的数组 我遇到的问题是控制器有一个空数组来存储数据。 然后通过对后端的请求填充此阵列。唯一的问题是指令没有使用更新的数据,它只使用在控制器上创建的空数组 我使用了随附的plunkr中的此指令 setTimeout就像我的ajax调用一样 //Very big arry that will become all the available choices. vm.allItems = []; // 'Loaded'
//Very big arry that will become all the available choices.
vm.allItems = [];
// 'Loaded' after time to act like async ajax request to server.
setTimeout(function(){
for (var i = 0; i < 9500; i++) {
var person = {
name: 'Adam' + i,
email: 'adam' + i + '@email.com',
age: 12,
country: 'United States'
};
vm.allItems.push(person);
}
document.getElementById('status').innerHTML = 'Loaded: ' + vm.allItems[4].name + ' and others.';
}, 1500);
我只是在测试更新status元素,看看数据何时应该出现
感谢您的帮助!提前感谢。有两个问题
第一:
vm.multipleDemo.selectedPeople = [vm.allItems[500], vm.allItems[4]];
在超时触发之前调用,因此两个值都为null
第二:
您需要将setTimeout更改为使用$timeout。结果应该是:
$timeout(function(){
for (var i = 0; i < 9500; i++) {
var person = {
name: 'Adam' + i,
email: 'adam' + i + '@email.com',
age: 12,
country: 'United States'
};
vm.allItems.push(person);
}
vm.multipleDemo.selectedPeople = [vm.allItems[500], vm.allItems[4]];
document.getElementById('status').innerHTML = 'Loaded: ' + vm.allItems[4].name + ' and others.';
}, 1500);
$timeout的工作原理与setTimeout非常相似,但它将回调函数包装在$apply中,以确保用户可以看到更改
您还没有发布AJAX请求,但是您应该查看$http来发出请求,这意味着结果将由angular查看。
请参阅:$http感谢您查看我的代码。作为一个新手,我真的很感激。谢谢你给我$timeout小费。只是用它来测试plunkr。plunkr似乎在工作,但当我更改代码时,会发生一些事情。我在我用来做ajax调用的工厂/服务中使用了$httpgetAll:function{return$http.getCONFIG.BASE_API_URL+all;}`这很好用。在我看来,如果我只是用类似{{allItems}的东西“记录”ajax调用的结果,那么我会看到输出进入视图。我的指令将allItems作为输入