2016-02-22 18 views
22

Tôi đang sử dụng bên dưới mã, Trong laravel lưỡiLàm thế nào để áp dụng chậm trễ trên AngularJS

<div ng-show="displayErrorMsg" class="form-group m-b alert alert-danger">{{errorMsg}} 

Trong angularjs khiển

$scope.errorMsg = "Data Empty"; 
$scope.displayErrorMsg = true; 
setTimeout(function() { $scope.displayErrorMsg = false;}, 2000); 

nhắn không biến mất sau 2 giây tự động như được đưa ra.

Nhưng khi tôi chỉ cần đặt cảnh báo ("kiểm tra"); hoặc nhấp vào bất kỳ thư nào biến mất. Cách giải quyết vấn đề này?

+0

Câu trả lời phức tạp, bạn cần sử dụng dịch vụ góc để cho góc nhìn biết khi có điều gì đó thay đổi và cập nhật tất cả 'phạm vi' và chế độ xem. ---- câu trả lời ngắn, hãy tìm câu trả lời của @Imtiaz Pabel hoặc @searching ... và sử dụng '$ timeout' :-) –

+0

Cảm ơn tất cả, nó hoạt động .. :) – Rita

Trả lời

30

Chỉ cần tiêm $timeout trong bộ điều khiển của bạn và sử dụng tính năng này.

$timeout(function() { $scope.displayErrorMsg = false;}, 2000); 

Ngoài ra bạn có thể sử dụng $ tiêu hóa hoặc $ áp dụng như sau

setTimeout(function() { 
    $scope.displayErrorMsg = false; 
    $scope.$digest(); 
}, 2000); 

setTimeout(function() { 
    $scope.$apply(function(){ 
     $scope.displayErrorMsg = false; 
    }); 
}, 2000); 

Kiểm tra ở đây như thế nào những tác phẩm này,

http://www.sitepoint.com/understanding-angulars-apply-digest/

3

Ví dụ 1: setTimeout

var timerCount = function() { 
    setTimeout(function() { 
     $scope.displayErrorMsg = false; 
     $scope.$apply(timerCount); 
    }, 2000); 
} 

Ví dụ 2: $ timeout

$timeout(function() { 
    $scope.displayErrorMsg = false; 
}, 2000); 
1

setTimeout là phương pháp của đối tượng cửa sổ. Vì vậy, để truy cập chức năng này, hãy tiêm $ window trong bộ điều khiển. Sau đó, bạn có thể gọi bất kỳ phương pháp như cảnh báo, xác nhận, setTimeout, setInterval, vv
Chi tiết https://docs.angularjs.org/api/ng/service/$window
Sau đó, Bạn có thể viết

$scope.errorMsg = "Data Empty"; 
$scope.displayErrorMsg = true; 
$window.setTimeout(function() { $scope.displayErrorMsg = false;}, 2000); 
2

Bạn có thể tiêm $ timeout. Phương thức window.setTimeout của Angular.

thử cái này: -

$timeout(function() { $scope.displayErrorMsg = false;}, 2000); 

cấu trúc của $ timeout là synatx: - $ timeout (fn, chậm trễ, invokeAny, vượt qua)

chức năng fn- mà bạn muốn trì hoãn

chậm trễ: - thời hạn thời gian

invokeAny: - nó sẽ thiết lập sai theo mặc định nếu không nó sẽ gọi hàm fn trong $ ap ply block

vượt qua: - đó là tham số tùy chọn để thực hiện chức năng.

Một cách tiếp cận: -

setTimeout(function() { 
    $scope.$apply(function(){ 
     $scope.displayErrorMsg = false; 
    }); 
}, 2000); 

phương pháp setTimeout chạy ra khỏi bối cảnh góc vì vậy chúng tôi cần phải gọi $ áp dụng mà sẽ gọi $ tiêu hóa chu kỳ bởi vì nếu chúng tôi cập nhật $ phạm vi bên trong setTimeout góc cần biết $ scope bị bẩn.

1

giải pháp cải thiện 1:

$scope.errorMsg = "Data Empty"; 
$scope.displayErrorMsg = true; 
if (timer) $timeout.cancel(timer); // restart counter 
timer = setTimeout(function() { $scope.displayErrorMsg = false;}, 2000); 

Giải pháp 1:

Bạn có thể sử dụng $timeout:

$scope.errorMsg = "Data Empty"; 
$scope.displayErrorMsg = true; 
setTimeout(function() { $scope.displayErrorMsg = false;}, 2000); 

Giải pháp 2:

Với setTimeout:

setTimeout(function() { 
    $scope.$apply(function(){ 
     $scope.displayErrorMsg = false; 
    }); 
}, 2000); 
2

Tôi thường cần một chức năng để chờ một chút vì bất kỳ lý do gì, cho mục đích thử nghiệm chỉ. Trong Java, chúng ta có thể sử dụng Thread.sleep(). Tuy nhiên, trong Javascript Tôi thích sử dụng một chức năng đơn giản tôi thấy here:

function sleep(milliseconds) { 
    var start = new Date().getTime(); 
    for (var i = 0; i < 1e7; i++) { 
    if ((new Date().getTime() - start) > milliseconds){ 
     break; 
    } 
    } 
} 

Nó đã làm việc cho tôi trong một vài tình huống, kể cả AngularJS. Nhưng, vui lòng, hãy nhớ rằng chức năng không nên được sử dụng trong môi trường sản xuất trừ khi bạn biết chính xác những gì bạn đang làm.

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