小编MyT*_*der的帖子

angular - 访问多个http调用的数据 - 如何解决promise

我陷入了一些我认为应该直截了当的事情.我需要从三个不同的ajax调用中获取数据,组合并处理所有三个,并将结果数组显示给用户.

在最简单的形式中,我的代码如下所示:

function giftControler ($scope, $http) {
  var names = $http.get("names.json"),
      naughty = $http.get("naughty.json"),
      nice = $http.get("nice.json");
Run Code Online (Sandbox Code Playgroud)

我知道我的变量被分配给promises,而不是实际的结果,并且http请求已经传递给事件队列.如果我用可执行语句跟随这些变量,这些变量将是未定义的.我不明白如何等待这些承诺来解决,以便继续处理它们.

我想做的是立即添加代码:

      for (var i=0; i<names.length; i++){
        for (var j=0; j<nice.length; j++){
          if (names[i] === nice[j]){
            names[i] = names[i] + "--Yay!!";
          };
        };
      };                
      $scope.kids = names;
Run Code Online (Sandbox Code Playgroud)

问题是,我不能像承诺一样解决数组.在http调用之后,Javascript将立即看到这些语句,并尝试立即执行它们,即使承诺尚未解决.

我遇到的问题是$ http api给了我一个带有三个函数的promise对象:error,success&then.在这种情况下,我不知道该如何处理.我需要一个单一的成功功能.我需要全部三个来解决,然后处理每个中的数据,然后将结果分配给角度模型.

我确信我错过了一些明显的东西,但是有人有建议吗?在我的实际工作中,我有几个ajax调用多个数据源和大量处理(比较值,排序,连接等)来提出一个好的数据集合,但我无法通过这个问题.

谢谢,

http angularjs

54
推荐指数
1
解决办法
3万
查看次数

使用ng-form进行角度ng-repeat,在控制器中访问验证

我正在尝试使用生成可编辑列表ng-repeat.我想提醒用户在继续之前更新任何编辑,因此我正在使用动态ng-form创建"嵌套"表单,因为文档说我可以对这些动态创建的输入使用验证.

虽然这似乎在HTML中工作,但我没有看到如何在控制器中访问那些动态创建的表单和相关的验证字段.具体来说,当用户更改输入时,我使用表单$ dirty属性调出一个按钮来告诉用户提交更改.到现在为止还挺好.但是,一旦提交了更改,我希望$setPristine()在该字段上指示已设置更改.在我允许提交主表单之前,可能还有其他方法可以确保在每个输入上提交更改,但这是我能想到的最好的方法.

不幸的是,即使文档说如果我将ng-form命名为它将传播到$scope对象,我找不到访问它的方法. $scope.dynamic_form未定义.

这是一个显示我的意思的plunker:

plnk

谢谢!

[编辑]只是为了添加问题,这个特定示例的工作原理是添加到ng-click动态创建的输入上:

ng-click="namesForm.name.$setPristine();clean()"
Run Code Online (Sandbox Code Playgroud)

但我仍然无法访问控制器中动态创建的表单.例如,我希望添加一个观察程序,namesForm.name.$pristine以便我可以设置mainForm.$setValidity(false)子表单,$dirty以防止用户提交主表单,直到所有子表单更改都已提交.

简而言之,问题是如何在父控制器中访问动态创建的嵌套ngForm的验证值?

validation angularjs angularjs-ng-repeat angularjs-ng-form

33
推荐指数
1
解决办法
4万
查看次数

使用Javascript预填充日期输入字段

我试图将日期预填充到html"日期"输入字段中,但它忽略了我尝试传递的值:

<html>
...
<input id='date' type='date'>
...
</html>

<script>
...
var myDate = new Date();
$("#date").val(myDate);
...
Run Code Online (Sandbox Code Playgroud)

我也尝试将日期对象作为字符串传递

var myDate = new Date().toDateString();
$("#date").val(myDate);
Run Code Online (Sandbox Code Playgroud)

当我打开表单时,日期字段为空.如果我删除了type ="date"标记,则该值显示为字符串,但之后我无法访问datepicker.如何预先填充日期输入并仍使用日期选择器?我很难过.

谢谢.

javascript html5 date input

19
推荐指数
3
解决办法
3万
查看次数

如何链接javascript日期函数

有没有办法链接javascript日期函数?

例如,我想这样的事情:

var d = new Date().setMinutes(0).setSeconds(0).setMilliseconds(0);
Run Code Online (Sandbox Code Playgroud)

此语法因错误而中断:

(new Date).setMinutes(0).setSeconds is not a function
Run Code Online (Sandbox Code Playgroud)

我知道我可以这样做:

var d = new Date();
d.setMinutes(0);
d.setSeconds(0);
d.setMilliseconds(0);
Run Code Online (Sandbox Code Playgroud)

但这感觉冗长而繁琐.有没有更好的办法?

javascript date chaining

13
推荐指数
2
解决办法
2575
查看次数

如何使用带有fullcalendar select回调的jQuery对话框?

我对jQuery以及javascript的运行方式有一个基本的困惑.我一直有同样的问题,如何将参数传递给jQuery函数,以便他们的方法可以使用这些变量调用函数.这是我最近的例子:

我正在使用fullcalendar插件.如果我点击日历,它会触发一个回调方法'select'.select回调会自动给出一些参数:'startDate''endDate'等.我想要的是打开一个jQuery对话框来收集其他信息,然后将新事件发布到服务器.沿着这个方向:

$('calendar').fullcalendar({
...
select: function (startDate, endDate) {
    $('#newEventPopup').dialog('open');
Run Code Online (Sandbox Code Playgroud)

在HTML中我有这样的事情:

<div title = 'How cool is this event?' id='newEventPopup'>
    <select id='coolness'>
        <option value = 'super'>Super!</option>
        <option value = 'cool'>Cool</option>
        <option value = 'dorky'>Dorky</option>
        <option value = 'lame'>Lame!</option>
    </select>
</div>
Run Code Online (Sandbox Code Playgroud)

最后,我想在对话框中添加一个按钮,将fullcalendar变量以及新变量发布到服务器:

var coolness = $('#coolness');
$('#newEventPopup').dialog({
    modal: true,
    autoOpen: false,
    ...
    button: {
        Save : function (){
            $.ajax({
                url: 'sample.php'
                type: 'POST'
                data: {
                    'start' : startDate,
                    'end' : endDate,
                    'coolness' : coolness
                 }
                 success: $('calendar').fullCalendar('refetchEvents')
             }
         }
     }
}); …
Run Code Online (Sandbox Code Playgroud)

jquery jquery-ui-dialog fullcalendar

6
推荐指数
1
解决办法
2万
查看次数

Angular:一次多个控制器调用服务

这应该是一个相当直接的问题,但我很难过.

我有一个服务,进行http调用,然后对结果进行广泛的后处理.我希望将处理结果分配给$ scope.variable并在几个不同的视图中使用.问题是我为每个视图都有单独的控制器,但我不希望每个控制器调用服务以从资源获取相同的数据并为每个控制器进行一次后处理.

超级简化我有这个:

myModule.factory ('Data', function ($http, $q) {
  getData: $http.get...
  processData: this.getData().success(function(data){
    ... do a ton of cpu intensive processing ... 
    return processed_data
ctrl1 = function(Data,$scope) {
  $scope.data = Data.processData()
  }
ctrl2 = function(Data,$scope) {
  $scope.data = Data.processData()
etc...
}
Run Code Online (Sandbox Code Playgroud)

显然我想设置$ scope.data = Data.processData()一次,并让它填充所有控制器.就目前而言,每个控制器都独立调用服务,这会产生不必要的流量和CPU.

我确信有一些简单的东西,但我无法弄清楚.有没有办法创建一个"超级"范围,我可以定义所有控制器范围共有的变量?

谢谢,

angularjs angularjs-service angularjs-scope angularjs-controller

4
推荐指数
1
解决办法
2596
查看次数

ListIterator和并发修改异常的问题

我有两个ArrayList,每个Array容纳一定大小的块:blockList,eraseList。块是具有两个字段的对象:开始和结束。我需要从另一组块中减去一组块。

我必须遍历好橡皮擦列表和“擦除”块,使其脱离重叠的blockList。因此,我的代码如下所示:

 void eraseBlocks (Arrylist<Blocks> blockList, ArrayList<Blocks> eraserList) {
    ListIterator<Blocks> it = blockList.listIterator();

    for (Blocks eraser: eraserList) {
        while (it.hasNext()) {
            Blocks block= it.next();
            if ((eraser.start <= block.start) && (eraser.end >= block.end))
                 blockList.remove(block);
            else if ((eraser.start <= block.start) && (eraser.end < block.end)){
                 block.set(start, eraser.end);
            else if () {
                        ...
                 //more code for where the eraser partially erases the beginning, end, or splits the block
                 //if statements call the .add(), .set(), and remove() methods on the blockList.
                        ...
                  }
            }
        } …
Run Code Online (Sandbox Code Playgroud)

java iterator arraylist

3
推荐指数
1
解决办法
6763
查看次数