2014-09-14 3 views
1

У меня есть эти две директив:угловой ошибка: Multiple директивы просящей новый/изолированного объем

app.directive('autofocus', function ($timeout) { 
    return { 
    scope: { 
     trigger: '=autofocus' 
    }, 
    replace: false, 
    link: function (scope, element) { 
     scope.$watch('trigger', 
     function (value) { 
      if (value) { 
      $timeout(function() { 
       element[0].focus(); 
      }); 
      } 
     } 
    ); 
    } 
    }; 
}); 

app.directive('checkCustomerName', function(Customer) { 
    return { 
    require: 'ngModel', 
    scope: { 
     value: '=ngModel' 
    }, 
    link: function(scope, elm, attrs, model) { 
     var CUSTOMERNAME_REGEXP = /^([ \u00c0-\u01ffa-zA-Z'\-])+$/; 
     var retval; 
     model.$parsers.unshift(function(viewValue) { 
     if (CUSTOMERNAME_REGEXP.test(viewValue)) { 
      var current = attrs.customerId; 
      var exists = Customer.findByName(viewValue); 
      if (exists && exists !== current) { // customer name exists already 
      model.$setValidity('taken', false); 
      model.$setValidity('invalid', true); 
      } else { // customer name does not exist 
      model.$setValidity('taken', true); 
      model.$setValidity('invalid', true); 
      retval = viewValue; 
      } 
     } else { // customer name is not valid 
      model.$setValidity('taken', true); 
      model.$setValidity('invalid', false); 
     } 
     return retval; 
     }); 
     elm.bind('blur', function() { 
     if (model.$viewValue) { // capitalize all words in value 
      model.$viewValue = capitalizeAllWords(model.$viewValue); 
      model.$render(); 
     } 
     }); 
    } 
    }; 
}); 

Они работают smootly при использовании separatedly, но, когда он используется в том же элементе, я получаю:

Multiple directives [autofocus, checkCustomerName] asking for new/isolated scope on: 
<input type="text" autofocus="true" check-customer-name> 

Как я могу позволить им работать togheter?
(К сожалению, я не копаться в нг-директивах логики, но ... :-().

ответ

1

Просто удалите изолированную сферу одной из ваших директив и смотреть атрибут.

Fe

app.directive('autofocus', function ($timeout) { 
    return { 
    replace: false, 
    link: function (scope, element, attr) { 
     scope.$watch(attr.autofocus, 
     function (value) { 
      if (value) { 
      $timeout(function() { 
       element[0].focus(); 
      }); 
      } 
     } 
    ); 
    } 
    }; 
}); 
+0

У меня такая же проблема и я попытался это решение, но оно всегда дает мне значение * undefined * Не могли бы вы рассказать мне, что мне не хватает? –

0

Я имел «нескольких директив прошу новый/изолированный объем» ту же ошибку. В моем случае проблема была, что была многократная регистрацией директивы с тем же именем.

.directive('directiveName',() => {}) 
.directive('directiveName',() => {}); 

, который произошел после неправильного слияния. Снятие одной из них устранило проблему.

Смежные вопросы