我试图制作一个指令,以我喜欢的格式生成 Lorem Ipsum 文本。这就是我所拥有的:
angular.module('mock.text', [])
.factory('TextGenerator', function() {
var words = [/** lots of array elements (lorem ipsum text) **/];
return {
createWords: function(wordCount) {
var wordCount = wordCount;
var idx = Math.floor(Math.random() * 199);
var sentence = words.slice(idx, wordCount);
sentence.join(' ');
sentence.charAt(0).toUpperCase();
return sentence;
}
}
})
.directive('text', function(TextGenerator) {
return {
restrict: 'EA',
link: function(scope, element, attrs) {
var words = TextGenerator.createWords(Number(attrs['numWords']));
scope.words = words;
},
scope: {},
template: '<p> {{words}} </p>'
}
});
然后将其发送到主app模块:
angular.module('myApp', ['mock.text']);
我还有一个测试来检查服务是否正常工作:
describe('TextGenerator', function() {
beforeEach(module('myApp'));
it('should have a createWords method', function() {
angular.mock.inject(function(TextGenerator) {
expect(TextGenerator.createWords).toBeDefined();
});
});
});
上面的测试通过,但是当我尝试实际使用像这样的指令
时<p text num-words="7"></p>
我改为在控制台中出错: undefined不是函数,它发生的行在指令定义中
var words = TextGenerator.createWords(Number(attrs['numWords']));
我尝试过其他方法试图找到问题的根源但没有运气。有人能解释一下这里发生了什么吗?
答案 0 :(得分:0)
服务一切都很好,我按原样累了你的代码。
代码在sentence.charAt(0).toUpperCase();
处突破
正确审核createWords
方法。