2015-07-11 45 views
6

我寫了兩條指令。其中之一是用於與單位輸入數字(如「1M」):在同一型號上發佈兩條指令

angular.module('ng', []) 
.directive('unit', function() { 
    return { 
     require: 'ngModel', 
     link: function (s, e, attributes, ngModel) { 
      ngModel.$parsers.push(function (i) { 
       return i + attributes.unit; 
      }); 

      ngModel.$formatters.push(function (i) { 
       return (i + '').replace(attributes.unit, ''); 
      }); 
     } 
    } 
}); 

第二個取代,.,因爲很多人在歐洲使用逗號而不是小數點的小數,我想我的值被標準化。

angular.module('ng', []) 
.directive('numberWithPoint', function() { 
    return { 
     require: 'ngModel', 
     link: function (s, e, attributes, ngModel) { 
      ngModel.$parsers.push(function (i) { 
       return i.replace(',', '.'); 
      }); 
     } 
    } 
}); 

的用法是:

<input type="text" ng-model="howLongSomethingIs" unit="m" number-with-point /> m 

問題:如果是獨自一人,如果我添加了number-with-point指令後,unit將不起作用unit的偉大工程的指令(所顯示的數值是示例1m不是1

我試圖搞砸return對象內的priority屬性,但沒有發生任何事情。

如何使這兩個指令一起工作?

在這jsfiddle,它似乎工作,但它使用Angular 1.2.1。我正在使用Angular 1.3.14。有人知道如何讓jsfiddle使用其他版本?

+0

你可以連接兩個指令的plunker/jsbin嗎?這肯定有助於調試它。 –

+0

好的,好主意。稍等片刻 –

+0

請參閱編輯。我添加了一些意見 –

回答

1

在這個jsfiddle中,它似乎工作,但它使用了Angular 1.2.1。我正在使用Angular 1.3.14。有人知道如何讓jsfiddle使用其他版本?

我只是在Angular 1.3.15本地運行提供的代碼 - 工作得很好。

當綁定到視圖時,輸入123071823,1238的計算結果爲123071823.1238m。所以它似乎工作得很好(在我的最後,並在你的小提琴)。

1.3.14 jsFiddle


上的jsfiddle加載不同的版本:

  1. 取下`框架&擴展選項卡角
  2. code.angularjs.org拿起你的版本。
  3. 將鏈接粘貼爲jsFiddle中的External resource
+0

謝謝你的測試...我有點不知道我在生產代碼中做了什麼不同。它實際上就像小提琴一樣簡單......看起來我不得不深入搜索。 –

+0

Myeah。我希望我能在這裏得到更多的幫助,但它似乎只是在工作。 –

+0

查看我的回答...呃,實際上你幫了我 - 因爲如果你沒有用我的Angular版本測試它,我仍然會在指令代碼中尋找錯誤,我不會想出正確的解。 –

1

該錯誤已找到。一個令人難以置信的愚蠢的事情。我的指令是在兩個單獨的文件中聲明,他們每個人的開始:

angular.module('nameOfMyApp.directives', []) 

當然,加載指令每次覆蓋nameOfMyApp.directives模塊。

我已經把它改爲

angular.module('nameOfMyApp.directives') 

,現在它工作得很好。