2013-05-03 22 views
10

Tôi chỉ nhận được dữ liệu json từ các dịch vụ trong bộ điều khiển.

Và tôi đang sử dụng chức năng gọi lại để in thông báo thành công khi được tải. Nó đang làm việc tốt nhưng nó cũng là ném một lỗi mà tôi đã đề cập trong câu hỏi

//JSON file 
{ 
"pc":"name" 
} 

// angular services 
var service = angular.module('Services', ['ngResource']). 
factory('Widgets', function($resource){ 
    return $resource('/json/home.json', {}, { 
     query: {method:'GET', params:{}, isArray:false} 
    }); 
}); 

//controller 
function editWidget($scope, Widgets) { 
$scope.data = Widgets.query(function(data) { 
    alert("Success Data Loaded ---> " + JSON.stringify(data.pc)); 
}); 
} 
+1

Không có gì sai với mã này là - vấn đề của bạn phải nằm ở nơi khác. Bạn thường nhận được thông báo lỗi này khi bạn thực hiện một '$ scope. $ Apply (...)' – joakimbl

+0

Cảnh báo có bị lỗi không? Làm thế nào về việc sử dụng một console.log để xem giá trị của json nếu cảnh báo cung cấp cho bạn vấn đề? – BoxerBucks

+0

@BoxerBucks có khi tôi đang sử dụng console.log nó không phải là ném lỗi. nhưng tôi chỉ muốn biết nguyên nhân của lỗi. –

Trả lời

12

alert, cũng như confirmprompt sẽ tạm dừng việc thực hiện các mã (khối thread), trong đó thời gian chờ và khoảng đi tất cả haywire nếu chúng cần được kích hoạt trong khi tạm dừng. Vòng lặp $digest được tạo thành từ hai vòng nhỏ hơn, xử lý hàng đợi $evalAsync và danh sách $watch. Hàng đợi $evalAsync được sử dụng để lên lịch công việc cần phải xảy ra bên ngoài khung ngăn xếp hiện tại, nhưng trước khi khung nhìn của trình duyệt hiển thị. Việc này thường được thực hiện với setTimeout(0). Cảnh báo của bạn trong thời gian này gây ra sự cố.

+0

Đây chắc chắn là vấn đề nhưng có một giải pháp nào ngoài việc không sử dụng cảnh báo? – RAC

+0

Sử dụng cảnh báo không chặn (modals). bạn thậm chí có thể ghi đè window.alert để gọi phương thức của bạn. Bạn cũng có thể tạo kiểu cho các cảnh báo phương thức và có thể trông đẹp hơn các cảnh báo tự nhiên. – TheSharpieOne

10

Bạn có thể sử dụng $ timeout để thực hiện cảnh báo sau khi chu kỳ phân hủy được thực hiện và cách này tránh được lỗi này.

$timeout(function() { 
    alert('Alert text'); 
}); 

Cũng đừng quên tiêm $ timeout vào chỉ thị của bạn

0
if(!confirm('Your message')){ 
    return false; 
}else { 
    return false; 
} 

Return sai trong cả hai trường hợp.

-2

@TheSharpieOne đúng, nó phù hợp với tôi.

function delayalert(messagestr){ 
 
      setTimeout(function(){ 
 
       alert(messagestr); 
 
      },0); 
 
}

Các vấn đề liên quan