好的,目前正在学习角度指令,但遇到了一个问题。
我有一个指令,其中在链接函数中创建了一个函数,该函数链接到在模板函数上作为 html 元素中的属性调用的范围。它也被称为在 html 标记之间。两个标签都没有更新。我怀疑它还没有编译或什么的。但是,我无法理解文档,因为它似乎一次谈论太多事情并且没有多大意义。或者他们遗漏了一些关键信息。
下面的任何一种方式都是我的代码的快照。
{{labelText()}} 不更新/插值。任何有关解决方案的帮助都会很棒!
var app = angular.module('mmApp', []);
app.directive('mmField', function(){
return {
'restrict': 'E',
'priority': 5,
'replace': true,
'scope': {
'path': '@',
'label': '@',
'type': '@',
'editable': '@'
},
'template': '<div class="mm-field">' +
'<label for="{{inputId()}}" ng-show="labelText()">{{labelText()}}</label> ' +
'</div>',
'link': function (scope, element, attrs) {
var query = null;
//this is where the labelText() function is defined
scope.labelText = function () {
var labelAttrValue = (scope.label || attrs['withLabel'] || '');
// cater for custom labels specified via the label or with-label attribute
if (labelAttrValue && labelAttrValue.toLowerCase() !== 'true' && labelAttrValue.toLowerCase() !== 'false') {
return (labelAttrValue || '') + ':';
} else if (labelAttrValue.toLowerCase() !== 'false' && scope.field) {
return (scope.field['name'] || 'FIELD_NAME_NOT_DEFINED') + ':';
} else if (labelAttrValue.toLowerCase() == 'false') {
return '';
} else {
return 'Loading...';
}
};
}
}
])
我的测试功能如下。使用 mocha 和 chai 测试套件。
describe('LabelText', function () {
it('should compile and run the directive and interpolate labelText()', function () {
var element = $($compile('<div id="#test">' +
'<mm-field with-label="MONKEY" editable="false" path="`enter something.name"></mm-field>' +
'</div>')($scope));
$scope.$digest();
expect(element.find('label').attr('ng-show')).to.not.equal(labelText()); //test fails and equals labelText()
});
});