2015-10-19 94 views
3

我正在使用引導程序和角度進行聊天。每個消息都以「well-sm」類顯示在其div中。 這是負責該代碼的樣子:角元素記錄不正確的值

<div ng-repeat="message in messages" class="media" > 
    <h5 class="media-heading"><span>{{message.nick}}</span> {{message.time | date: "yyyy.MM.dd HH:mm"}}</h5> 
    <div change-well-height class="well well-sm">{{message.body}} 
    </div> 
</div> 

但是,如果它的長度是太大了,我們得到這樣的: How ordinary and long messages look like

所以我決定增加一個指令變化以及高度看起來scrollWidth是否大於clientWidth,如果是,則更改高度。 代碼的指令:

(function() { 
    'use strict'; 

    app.directive('changeWellHeight', [ 
    '$location', function($location) { 
     return { 
     restrict: "A", 
     link: function(scope, element, attr) { 
      $(document).ready(function(){ 
      console.log(element); 
      console.log(element['0'].scrollHeight, element['0'].clientHeight, 'Height'); 
      console.log(element['0'].scrollWidth, element['0'].clientWidth, 'Width'); 
      if (element['0'].scrollHeight > element['0'].clientHeight || element['0'].scrollWidth > element['0'].clientWidth){ 
       //do stuff 
      } 
      }); 
     } 
     }; 
    } 
    ]); 

}).call(this); 

NOW問題當我第一次看登出整個元素,我看到,很多都在Chrome和FF的屬性中: clientWidth:467, scrollWidth: 2347個

但接下來的console.log顯示: 435 435「寬度」

這怎麼可能是同一個對象給了我不同的價值觀?我不知道如何解決這個問題

+0

你在某些時候改變數值? console.log不會顯示所有不同的值,只會有最後一個,至少在chrome中,它通過日誌旁邊控制檯中的黃色三角形顯示。 – koox00

+0

@ koox00,謝謝你的評論。那裏沒有黃色的三角形。 我不會更改該值,只需將其註銷即可。可以隱式改變某處,但我沒有編寫任何代碼來改變它。 另外,這很奇怪。我註銷了元素的所有屬性並且它是正確的,並且在下一行中,我只註銷了兩個屬性 - 其中一個屬性不正確。我認爲沒有時間去改變。 – Sapientisat

+0

'link'運行時不會呈現文本,請嘗試使用'$ timeout' – charlietfl

回答

3

而不是使用document.ready這是沒有價值的反正,使用$timeout所以,當你的代碼運行的文本將呈現:

app.directive('changeWellHeight', [ 
    '$location', '$timeout', function($location, $timeout) { 
     return { 
     restrict: "A", 
     link: function(scope, element, attr) { 
      $timeout(function(){ 
      console.log(element); 
      console.log(element['0'].scrollHeight, element['0'].clientHeight, 'Height'); 
      console.log(element['0'].scrollWidth, element['0'].clientWidth, 'Width'); 
      if (element['0'].scrollHeight > element['0'].clientHeight || element['0'].scrollWidth > element['0'].clientWidth){ 
       //do stuff 
      } 
      }); 
     } 
     }; 
    } 
    ]); 
1

也許這個值在控制檯打開元素內部的屬性之前就會變得更新。我已經在Chrome上注意到了這一點,如果在控制檯打開對象之前更新對象的某個屬性值,然後打開該對象,即使您在更新之前對其進行了控制,也會看到該值已更新。 要測試,聲明一個數組數組,控制它,更改值,然後打開該對象,您將看到更新的值。

var array = [[0]]; 
console.log(array); 
array[0][0] = 1; 

現在,要弄清楚爲什麼價值在變化,我們需要更多的細節。