2014-11-27 3 views
0

У меня есть этот код, и она работает:AngularJS: Фабрика и фильтры - завод не работает

var app = angular.module('twitterApp', ['twitterApp.services', 'ngSanitize']); 
 
app.filter('clearImage', function() { 
 
    return function (text) { 
 
     var str = text.replace(/_normal./g, '.'); 
 
     return str; 
 
    }; 
 
}); 
 
app.filter('links', function() { 
 
    return function (text) { 
 
     var str = text.replace(/@([^ ']+)/g, function(u, screen_name) { 
 
      var link = '<a target=blank href="http://twitter.com/intent/user?screen_name=' + screen_name + '">' + u + '</a>'; 
 
      return link;    
 
     }); 
 
     str = str.replace(/#([^ ']+)/g, function (t, hash) { 
 
      var link = '<a target=blank href="https://twitter.com/hashtag/' + hash + '?src=hash">' + t + '</a> '; 
 
      return link; 
 
        
 
     }); 
 
     return str; 
 
    }; 
 
});

Я пытаюсь быть более объектно-ориентированным и модульная, так что я сделал следующий код, но он не работает:

var app = angular.module('twitterApp', ['twitterApp.services', 'ngSanitize']); 
 

 
app.factory('StratoFactory', function() { 
 
    var factory = {}; 
 
    return { 
 
    removeNormalStringFromImage : function(text) {  
 
      var str = text.replace(/_normal./g, '.'); 
 
      return str;  
 
    }, 
 
    userName2Link : function(text) { 
 
     
 
     var str = text.replace(/@([^ ']+)/g, function(u, screen_name) { 
 
      var link = '<a target=blank href="http://twitter.com/intent/user?screen_name=' + screen_name + '">' + u + '</a>'; 
 
      return link;  
 
     }); 
 
     str = str.replace(/#([^ ']+)/g, function (t, hash) { 
 
      var link = '<a target=blank href="https://twitter.com/hashtag/' + hash + '?src=hash">' + t + '</a> '; 
 
      return link;      
 
     }); 
 
     return str; 
 
    } 
 
    }; 
 
    return factory; 
 
    
 
}); 
 

 

 
app.filter('clearImage', function(StratoFactory) { 
 
    return function(text) { 
 
    StratoFactory.removeNormalStringFromImage(text); 
 
    }; 
 
}); 
 
app.filter('links', function(StratoFactory) { 
 
    return function(text) { 
 
    StratoFactory.userName2Link(text); 
 
    }; 
 
});

Может кто-нибудь объяснить мне причину того, что не так со второй версией кода? Благодаря!

+0

Javascript песочница было бы очень полезно –

+0

Привет @STEVER, я использовал код с этой страницы [ссылка] (http://www.chaosm.net/blog/2014/05/24/angularjs-твиттер-аутентификации с-OAuth-ю /). Только, я добавил эти фильтры и применил их к ответу JSON. –

ответ

0

Я наконец нашел решение! Не было никаких ошибок в консоли, потому что все было построено нормально. Но проблема в том, что мои фильтры ничего не возвращали. Поэтому я просто добавил возврат, и теперь все в порядке. Действительно банальная ошибка. Вот код:

var app = angular.module('twitterApp', ['twitterApp.services', 'ngSanitize']); 

app.factory('StratoFactory', function() { 
var factory = {}; 
factory.removeNormalStringFromImage = function(text) {  
     var str = text.replace(/_normal./g, '.'); 
     return str;  
}, 
factory.userName2Link = function(text) { 

    var str = text.replace(/@([^ ']+)/g, function(u, screen_name) { 
     var link = '<a target=blank href="http://twitter.com/intent/user?screen_name=' +  screen_name + '">' + u + '</a>'; 
     return link;  
    }); 
    str = str.replace(/#([^ ']+)/g, function (t, hash) { 
     var link = '<a target=blank href="https://twitter.com/hashtag/' + hash + '?src=hash">' +  t + '</a> '; 
     return link;      
    }); 
    return str; 
}; 
return factory; 
}); 

app.filter('clearImage', function(StratoFactory) { 
return function(text) { 
**return** StratoFactory.removeNormalStringFromImage(text); 
}; 
}); 
app.filter('links', function(StratoFactory) { 
return function(text) { 
**return** StratoFactory.userName2Link(text); 
}; 
}); 
0

У вас есть два оператора возврата на вашем заводе. вам нужно создать объект, назначить ему метод, а затем вернуть его.

попробовать это:

app.factory('StratoFactory', function() { 
    var factory = {}; 
    factory.removeNormalStringFromImage = function(text) { 
      var str = text.replace(/_normal./g, '.'); 
      return str; 
    } 
    factory.userName2Link = function(text) { 

     var str = text.replace(/@([^ ']+)/g, function(u, screen_name) { 
      var link = '<a target=blank href="http://twitter.com/intent/user?screen_name=' + screen_name + '">' + u + '</a>'; 
      return link; 
     }); 
     str = str.replace(/#([^ ']+)/g, function (t, hash) { 
      var link = '<a target=blank href="https://twitter.com/hashtag/' + hash + '?src=hash">' + t + '</a> '; 
      return link; 
     }); 
     return str; 
    } 

    return factory; 
}); 
+0

Да, это была ошибка, но она все еще не работает. У меня нет ошибок на странице, но когда я применяю фильтр на JSON, страница ничего не показывает. –