Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angular指令未获取更新的控制器数据_Javascript_Angularjs_Angularjs Directive - Fatal编程技术网

Javascript Angular指令未获取更新的控制器数据

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'

我有一个表单,其中一个select是一个字段,数据来自后端生成的数组

我遇到的问题是控制器有一个空数组来存储数据。 然后通过对后端的请求填充此阵列。唯一的问题是指令没有使用更新的数据,它只使用在控制器上创建的空数组

我使用了随附的plunkr中的此指令

setTimeout就像我的ajax调用一样

     //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作为输入