Ответ 1
Если вы посмотрите на код в этом jsFiddle, функция фильтра возвращает функцию, которая принимает аргумент text
и т.д. Это должно быть примерно так:
myapp.filter('truncate',function(){
return function(text, length) {
var end = "..."
text = text.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
if (isNaN(length))
length = 23;
if (text.length <= length || text.length - end.length <= length) {
return text;
}
else {
return String(text).substring(0, length-end.length) + end;
}
}
});
Причина, по которой вы получили "Неизвестный поставщик: textProvider", состоит в том, что у вас есть text
как аргумент вашего фильтра. Это делает Angular искать службу под названием text
, которая не существует. Это возвращаемая вами функция принимает text
как аргумент.
Подумайте об этом так, первая функция (тот, который вы передаете в angular.filter) - это функция, которая сначала создает фильтр. Эта функция выполняется только один раз в вашем приложении. Ответственность за эту функцию заключается в создании другой функции и ее возврате, а функция, которую он возвращает, - это ваш фильтр. Причина, по которой у вас есть функция, возвращающая функцию, позволяет вам возвращать различные реализации в зависимости от вашей системы. Возможно, что-то вроде этого:
myapp.filter('truncate', function(myService) {
if (myService.someCondition()) {
return function(text, length) {
// return the text as usual
}
} else {
return function(text, length) {
// return the text and do some other things as well
}
}
});