2015-09-06 197 views
1

我正在使用angular 1.4.x.AngularJS自定義指令不會加載

我做了一個自定義指令,檢查天氣在服務器上的字段是唯一的(該字段被稱爲「jmbg」)。我有以下代碼:

(function() { 
angular 
    .module('app') 
    .directive('uniqueJmbg', uniqueJmbg); 

uniqueJmbg.$inject = ['$q', '$http']; 
function uniqueJmbg($q, $http) { 
    restrict: 'A', 
    require: 'ngModel', 
    link: function(scope, elem, attrs, ngModelCtrl) { 
     ngModelCtrl.$asyncValidators.uniqueJmbg = function(modelValue, viewValue) { 
      var value = modelValue || viewValue; 

      return $http.get('/server/users/' + value) 
       .then(function resolved() { 
        return $q.reject('exists'); 
       }, function rejected() { 
        return true; 
      }); 
     }; 
    } 
} 
})(); 

我以下列方式使用指令,在HTML:

<input class="form-control" type="text" id="jmbg" name="jmbg" ng-model="rad.radnik.jmbg" ng-model-options="{ updateOn: 'default blur', debounce: {'default':400, 'blur':0 } }" unique-jmbg/> 

在它的事項的情況下,我用我的控制器與controllerAs語法。 現在,會發生什麼情況是包含我的uniqueJmbg定義的文件永遠不會加載(我在瀏覽器調試器中看不到它)。如果我將代碼移動到一個組件,該組件不會加載應用程序停止工作(並且控制檯中沒有錯誤),所以我無法調試它。

任何想法什麼可能是這樣錯我甚至無法訪問瀏覽器中的代碼?

+0

這可能聽起來有點傻,但你裝index.html文件中的directive.js文件? –

回答

1

添加依賴到模塊

angular 
    .module('app', []) 
    .directive(... 

而且你需要從模塊返回一個對象,所以修正將是:

function uniqueJmbg($q, $http) { 
    return { 
     restrict: 'A', 
     require: 'ngModel', 
     link: function(scope, elem, attrs, ngModelCtrl) { 
      ... 
     } 
    }; 
} 
+0

我認爲你的第一次更正是錯誤的 - 從措辭來看,聽起來像OP在其他地方定義了「app」模塊,在這種情況下,對「module」的單參數調用是正確的。雖然你的答案的第二部分是準確的。 –

+0

它是在別處定義的,這就是爲什麼你需要模塊的依賴關係(如果有的話,它可以保持爲空數組)。所以你可以在這裏注入它們作爲'angular.module('app.whatever.module',['app.whatever.dependency'])。directive()' – Davion

+0

否否,OP使用單參數版本'模塊「充當吸氣劑。在這種情況下,雙參數版本*錯誤*,因爲它會嘗試重新定義一個具有相同名稱的新模塊。 –