[信息]
我想要实现的是创建自定义Angular指令,这些指令将封装所有必需的JS代码以使其正常工作。指令不知道要显示什么内容,也不知道从用户那里接收的任何输入值存储在哪里。这些信息将从指令的属性中获取。我的指令将使用父级$scop,而不会创建它们自己的$scope。
[问题] 由于指令不知道在$scope中映射ng-model和ng-bind的位置,所以我的方法是读取指令的属性,识别应该是 ng-model 和 ng-bing 属性,然后将它们设置为相应的元素。但是这种方法并没有生效。我认为这是由于我的知识不足,因此我在这里询问:我的方法是否正确?是否可能以这种方式设置ngModel和ngBind?我做错了什么?
[我的指令代码]
var directives = angular.module('test.directives', []);
directives.directive("labeledInput", function() {
return {
restrict: 'E',
scope: false,
template: "<div>" +
"<span class='label'></span>" +
"<input class='input' type='text'></input>" +
"</div>",
link: function(scope, element) {
var elementIdentifier = angular.element(element[0]).attr("idntfr");
var elementClass = angular.element(element[0]).attr("element-class");
var scopeValueName = angular.element(element[0]).attr("value-name");
var defaultValue = angular.element(element[0]).attr("default-value");
var elementLabel = angular.element(element[0]).attr("label");
scope[scopeValueName] = defaultValue;
scope[elementIdentifier] = elementLabel;
$(angular.element(element[0]).children()[0]).attr('id', elementIdentifier);
$(angular.element(element[0]).children()[0]).addClass(elementClass);
$(angular.element(element[0]).children().children()[1]).attr('ng-model', scopeValueName);
$(angular.element(element[0]).children().children()[0]).attr('ng-bind', elementIdentifier);
}
};
});
[结果] 因此,我在HTML页面中看到ng-model和ng-bind绑定在正确的位置,在Batarang提供的作用域中有scope[scopeValueName]和scope[elementIdentifier],但我在屏幕上没有看到它们作为值显示。
有人解决过类似的问题吗?
谢谢你的时间!
[编辑] 抱歉,似乎我的问题没有被理解,我会添加一些细节!
以下是我指令的示例HTML用法:
<labeled-input
idntfr='id001'
element-class='someClass'
value-name='person_name'
default-value='default'
label='Person Name:'
>
</labeled-input>
在Angular解析指令并执行它的任务后,我在浏览器中看到的是:
<div id="effect_dt" class="someClass">
<span class="label" ng-bind="id001"></span>
<input class="input" type="text" ng-model="person_name">
</div>
在我的控制器作用域中,我有 - $scope.id001 = "人名:"和$scope.person_name = 默认值。但是这些值根本没有显示在页面上。