角度http在特定条件下无法正常工作

时间:2016-08-14 00:51:17

标签: angularjs http angularjs-directive

我正在使用角度进行项目。 在这个项目中,我创建了一个下拉指令。 该指令执行get请求以填充下拉菜单

现在有些页面有多个下拉列表,在一些非常具体的情况下,http请求不会响应来自服务器的答案(尽管它说它发送了它)

  1. 请求未在初始加载时完成,但是通过使用angular routing重新加载来启动
  2. 下拉信息引用它自己的ID(特定项目项目)

  3. 只有第一个指令不起作用,后续下拉指令才能正常工作

  4. 这是指令

    app.directive('dropdown', function($http){
        return{
            restrict:'E',
            templateUrl:'/templates/dropdown.html',
            scope:{
                selectedid:'=',
                objectdefinition:'='
            },
            link:function(scope){
                scope.visible = false;
    
                $http.get("/api/" + scope.objectdefinition.key)
                .then(function(res) {
                    scope.data = res.data
                },function(){
    
                });
    
                scope.$watch('selectedid',function(newVal){
                    if(newVal != null){
                        console.log('made')
                        $http.get("/api/" + scope.objectdefinition.key + '/' + scope.selectedid)
                        .then(function(res) {
                            console.log('received')
                            scope.selectedObject = res.data;
                        },function(){
    
                        });
                    }
                })
    
                scope.select = function(item){
                    scope.visible = false;
                    scope.selectedObject = item
                    scope.selectedid = item._id
                }
    
            }
        }
    });
    

    这是在视图中调用

    .col-md-8.col-md-offset-2
        form
            .form-group
                button.btn.btn-success(ng-click='save()') Save
                a.btn.btn-danger(href='/{{object}}') Cancel
            .form-group(ng-repeat='attribute in current.attributes' ng-switch="attribute.type")
                label {{attribute.name}}
                div(ng-if='!attribute.array')            
                    input.form-control(ng-switch-when='text' placeholder='{{attribute.name}}' ng-model='$parent.$parent.$parent.data[attribute.name]') 
                    datetimepicker(ng-switch-when='date' placeholder='{{attribute.name}}' model='$parent.$parent.$parent.data[attribute.name]')
               ---->dropdown(ng-switch-when='object' selectedid='$parent.$parent.$parent.data[attribute.name]' objectdefinition='definition[attribute.objectType]' )
                    button.btn.btn-default(ng-switch-when='boolean' ng-model='$parent.$parent.$parent.data[attribute.name]' bs-checkbox)
    
                    input.form-control(ng-switch-default placeholder='{{attribute.name}}' ng-model='$parent.$parent.$parent.data[attribute.name]') 
                div.well(ng-if='attribute.array' )
                    .panel.panel-default(style='display:inline-block; margin-right: 10px' ng-repeat='entry in $parent.$parent.data[attribute.name] track by $index')
                        .panel-body
                            input( ng-model='entry').form-control
    

    这是问题的图片 初始加载一切正常工作2请求分别为1下拉 initial load

    某种程度上不起作用,因为只返回了1个http调用 navigated away and back

    我意识到这是一个非常具体的问题,除了这些代码行之外还有更多的项目,但我真的希望之前的其他人已经走过这种奇怪的$ http行为(因为我认为问题与此有关)

1 个答案:

答案 0 :(得分:0)

angular的http服务似乎有问题

然而这似乎有效,但我不知道为什么角度的版本不起作用

$.get("/api/" + scope.objectdefinition.key + '/' + scope.selectedid,function(res) {
                        scope.selectedObject = res;
                        scope.$apply();
                    });