Hỏi về directive trong angularjs



  • Nhu cầu của mình là chuyển từ timestamp (milisecond Unix) sang chuỗi datetime, mình có thử tạo directive (để view có thể sử dụng nhiều nơi), cụ thể:

    Code html của mình như thế này:

    <input type="text" ng-model="text" />
    <span show-date="{{text}}"></span>
    

    Directive showDate của mình như thế này:

    angular.module('app').directive('showDate', function(){
    	return {
    		link: function(scope, element, attrs){
    			var timestamp = (attrs.showDate);
    			var d = new Date(+timestamp);
    			element.html(d.getFullYear() + '/' + (d.getMonth()+1) + '/' + d.getDate() + ' ' + d.getHours() + ':' + d.getMinutes());
    		}
    	}
    });
    

    Vấn đề là cái html Inner của span chỉ show kết quả ban đầu (1970/1/1 xx:yy), khi nhập giá trị mới cho {{text}} thì span vẫn giữ nguyên, không thay đổi gì cả (?!!)
    Vậy mình hiểu sai hay thiếu cái gì trong directive showDate của mình?




  • Global Moderator

    @phatht Hàm link bạn đang sử dụng chỉ chạy 1 lần sau khi DOM được sinh ra. Bạn cần phải theo dõi attribute showDate bằng hàm $watch, sau đó, cập nhật lại view.

    Bạn tham khảo thêm ví dụ mẫu trên trang chủ của nó ở mục Creating a Directive that Manipulates the DOM

    Tech-nông
    Twitter: @nhubaovu
    Profile: about.me/vunb

    0


  • Thank all


Log in to reply