angularjs – 将$state或$stateParams注入到使用angular ui路由器不可能的指令中

前端之家收集整理的这篇文章主要介绍了angularjs – 将$state或$stateParams注入到使用angular ui路由器不可能的指令中前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当我将$state / $stateParams注入指令时,它们在unique函数中不可用,为什么?
  1. 'use strict';
  2. angular.module('TGB').directive('uniqueSchoolclassnumberValidator',function (schoolclassCodeService) {
  3. return {
  4. restrict: 'A',require: 'ngModel',link: function (scope,element,attrs,ngModel) {
  5. ngModel.$asyncValidators.unique = function (schoolclassNumer) {
  6.  
  7. var schoolyearId = 1; // Read schoolyearId from the $stateParams.id but how to inject?
  8. return schoolclassCodeService.exists(schoolyearId,schoolclassNumber);
  9. };
  10. }
  11. };
  12. });

UPDATE

正如您在我的谷歌Chrome控制台中看到的那样$stateParams或$state未定义!

您将需要一个Controller作为指令的一部分,其中可以注入$stateParams.沿着这些方向的东西应该工作(未经测试)
  1. (function (){
  2. angular
  3. .module('TGB')
  4. .directive('uniqueSchoolclassnumberValidator',schoolclassDirective);
  5.  
  6. schoolclassDirective.$inject = ['$state','$stateParams','$compile','schoolclassCodeService'];
  7.  
  8. function schoolclassDirective($state,$stateParams,$compile,schoolclassCodeService) {
  9. var directive = {
  10. restrict: 'A',controller : MyController
  11. link: function (scope,listOfCtrls) {
  12. // you will need to get the ngModelCtrl from the list of controllers as you have the require field set above
  13. var ngModelCtrl = listOfCtrls[0]//[1];
  14. var myCtrl = listOfCtrls[1]//[0];
  15. ngModelCtrl.$asyncValidators.unique = function (schoolclassNumer) {
  16.  
  17. var schoolyearId = myCtrl.id;
  18. return schoolclassCodeService.exists(schoolyearId,schoolclassNumber);
  19. };
  20. };
  21. };
  22.  
  23.  
  24. function MyController($state,$stateParams){
  25. var scope = this;
  26. scope.id= $stateParams.schoolyearId;
  27. }
  28.  
  29. return directive;
  30. }}

另请注意wiki中$stateParams的使用情况

如果它是父状态的一部分,获得1which的另一种方法是定义解决方function of the parent state并在控制器内使用它.

猜你在找的Angularjs相关文章