2016-04-12 2 views
1

Это то, что у меня есть:передачи данных в другой области

$http.get("http://localhost/app/api/Suppliers").success(function(response) { 
    $scope.dataSource = response; 
    console.log($scope.dataSource); 
    $scope.safeApply(function() { 
     $scope.settings.columns[3] = $scope.dataSource; 
    }); 
}); 


$scope.settings = { 
    colHeaders: ["Code", "Comments"], 
    contextMenu : ["row_above","row_below","remove_row"], 
    colWidths: [100, 100], 
    columns : [ 
     { type: 'dropdown', 
      source: ['Not Started', 'In Progress', 'Completed'] 
     }, 
     {}, 
     {}, 
     { type: 'dropdown', 
      source: $scope.dataSource, 
     } 
    ] 
}; 

Проблема $scope.dataSource не определен, он не отображает данные. Каким должно быть решение этого?

UPDATE: Это отображает данные в моем вызове $ http. Но в источнике настроек, когда я называю источник: $ scope.dataSource неопределен

+0

try this $ scope. $ Apply (function() { $ scope.settings.columns.slice (3,0, $ scope.dataSource); }); –

+0

@ Ответ отклика в порядке. Поэтому я думаю, что проблема связана с $ scope.dataSource –

+0

@SSH по-прежнему безрезультатно :( –

ответ

0

Когда вы делаете запрос на сервер, остальная часть контроллера будет скомпилирован, то вы будете ввести функцию успеха

вы объявляете массив внутри success вашего запроса, это лучше быть объявлены вне как этот

$scope.dataSource = [] 

$http.get("http://localhost/app/api/Suppliers").success(function(response) { 
    $scope.dataSource = response; 
    console.log($scope.dataSource); 
    $scope.safeApply(function() { 
     $scope.settings.columns[3] = $scope.dataSource; 
    }); 
}); 

UPDATE

попробовать этот

$http.get("http://localhost/app/api/Suppliers").success(function(response) { 
     $scope.dataSource = response; 
     console.log($scope.dataSource); 

     getSetting(); 

     $scope.safeApply(function() { 
     $scope.settings.columns[3] = $scope.dataSource; 
     }); 
    }); 


    var getSetting = function() { 
     $scope.settings = { 
     colHeaders: ["Code", "Comments"], 
     contextMenu: ["row_above", "row_below", "remove_row"], 
     colWidths: [100, 100], 
     columns: [{ 
      type: 'dropdown', 
      source: ['Not Started', 'In Progress', 'Completed'] 
     }, {}, {}, { 
      type: 'dropdown', 
      source: $scope.dataSource, 
     }] 
     }; 
    } 
+0

привет, спасибо за это. Но я уже пробовал это. Но массив содержит 0. –

+0

Проверьте мой вариант ответа – amrdruid

+0

все еще не работает. Я думаю, мне нужна переменная массива, чтобы поместить значения $ scope.dataSource. –

0

Итак, сначала вы должны знать, что при объявлении $scope.settings = {...}$http вызов не будет еще более, так что вместо сочинительство

{ 
    type: 'dropdown', 
    source: $scope.dataSource, 
} 

Вы можете также просто написать

{ 
    type: 'dropdown', 
    source: null, 
} 

Затем, когда заканчивается звонок $http, я предполагаю, что вы хотите установить это свойство source. Однако в вашем коде вы переопределяете весь $scope.settings.columns[3], а не только его source.

Попробуйте вместо этого:

$http.get("http://localhost/app/api/Suppliers").success(function(response) { 
    $scope.dataSource = response; 
    console.log($scope.dataSource); 
    $scope.settings.columns[3].source = $scope.dataSource; 
}); 

Обратите внимание, что я удалил safeApply который является анти-модель. Здесь вызов $http позаботится о цикле дайджеста.

0

Найден ответ!

$scope.suppliers = []; 

$http.get("http://localhost/i95/api/Suppliers").success(function(data, status, headers, config) { 
    for(var i = 0; i < data.length; i++) { 
     $scope.suppliers.push(data[i].company); 
    } 
    console.log($scope.suppliers); 
}); 

Так что создание глобальной переменной и добавление метода push исправили проблему.

Смежные вопросы