2015-09-06 149 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使用单参数版本'模块“充当吸气剂。在这种情况下,双参数版本*错误*,因为它会尝试重新定义一个具有相同名称的新模块。 –

相关问题