2015-03-26 11 views
5

tôi đang cố gắng để đưa một số nguyên ngẫu nhiên trong con đường ng-src của tôi, như thế:

<div ng-repeat="user in users"> 
     <img ng-src="{{randomPicture()}}" alt=""> 
</div> 

Và đây là chức năng cơ bản của tôi trong bộ điều khiển của tôi:

$scope.randomPicture = function(){ 
    var PATH = 'assets/images/'; 
    var image = Math.floor((Math.random() * 12) + 1); 
    var ext = '.jpg'; 
    var randomPic = PATH + image + ext; 

    return randomPic; 
}; 

Các hình ảnh được hiển thị nhưng trong bảng điều khiển tôi có lỗi này:

Error: [$rootScope:infdig] 10 $digest() iterations reached. Aborting! 

Tôi đã tìm thấy nhiều câu hỏi về điều đó ở đây trong ngăn xếp nhưng tôi vẫn không thể loại bỏ lỗi đó. Cảm ơn bạn đã giúp đỡ.

+0

thử src này = "randomPicture()" –

+0

tôi đã cố gắng theo cách này nhưng tiếc là không hoạt ... – adam

+0

sau Câu trả lời được cập nhật công việc một cách hoàn hảo và floribon lỗi fixe 10 $ digest() vấn đề trong trường hợp của tôi. – adam

Trả lời

8

Ràng buộc của bạn là ngẫu nhiên, nó sẽ khác nhau mỗi khi Góc sẽ thực thi trình theo dõi của ràng buộc này.

Tuy nhiên, Góc chỉ dừng chu kỳ tiêu hóa khi đạt đến trạng thái ổn định trong đó tất cả người theo dõi trả về cùng một giá trị hai lần liên tiếp, điều này không bao giờ xảy ra với bạn.

Tóm lại, bạn không thể ràng buộc một giá trị ngẫu nhiên hoặc bất kỳ thứ gì luôn khác nhau, trong một liên kết Góc. Bạn nên tạo hình ảnh của mình một lần và tùy chọn ngẫu nhiên lại hình ảnh dựa trên một số sự kiện.

$scope.randomPicture = generateRandomPicture(); 

<img ng-src="{{randomPicture}}"> 

UPDATE: Và nếu bạn muốn làm mới hình ảnh mỗi 3 giây ví dụ, bạn có thể thêm

// Generate a new random picture every 3 seconds 
$interval(function() { 
    $scope.randomPicture = generateRandomPicture(); 
}, 3000); 

Cập nhật 2: Bây giờ Tôi hiểu rõ hơn vấn đề của bạn, tôi sẽ đề nghị giữ mọi thứ như vậy nhưng sử dụng :: được hiển thị bên dưới nếu sử dụng ít nhất là Angular 1.3. Bằng cách này, bạn sẽ có một hình ảnh ngẫu nhiên được tạo cho mỗi người dùng, nhưng chỉ được tạo một lần.

Trên một phiên bản trước đó của Góc hoặc cách khác, bạn có thể tạo ra một hình ảnh xác định cho mỗi người dùng cảm thấy ngẫu nhiên. ví dụ sử dụng HTML của bạn:

<img ng-src="{{randomPicture($index)}}"> 

Và trong điều khiển của bạn

var rand1 = Math.round(Math.random()*10); 
var rand2 = Math.round(Math.random()*10); 

$scope.randomPicture = function(index) { 
    var PATH = 'assets/images/'; 
    var image = (index+rand1*rand2)%13 + 1; 
    var ext = '.jpg'; 
    var randomPic = PATH + image + ext; 

    return randomPic; 
}; 


Lưu ý rằng nếu bạn đang sử dụng 1.3+ góc và chỉ muốn tạo ra hình ảnh một lần, bạn có thể sử dụng ont thời gian ràng buộc sử dụng :: cú pháp (sử dụng cùng mã cho randomPicture):

<img ng-src="{{::randomPicture()}}"> 
+0

Cảm ơn floribon sự giúp đỡ của bạn, nhưng với giải pháp này: generateRandomPicture(), sẽ tạo ra một lần duy nhất một hình ảnh mới. Đó là giải pháp đầu tiên của tôi để khắc phục vấn đề. – adam

+0

Giống như tôi đã thấy một số ai khác upvoting câu trả lời này, tôi chỉ muốn chính xác ** giải pháp mà không hoạt động ... ** – adam

+0

@ Adam giải pháp giải quyết vấn đề của bạn: bạn chỉ đơn giản là không thể tạo ra một hình ảnh ngẫu nhiên trong chức năng này.Thay vào đó, bạn nên làm mới bộ ảnh trong phạm vi của mình theo cách thủ công khi bạn muốn: sau một thời gian chờ, một hành động cụ thể của người dùng, v.v. Có thể bạn có thể chỉ định chính xác những gì bạn mong đợi để xem? Bạn muốn làm gì chính xác? – floribon

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