我对 AngularJS 很陌生,并且在我的项目中遇到了一些范围丢失的问题。我将项目简化到最低限度,以便专注于问题。
我有一个“覆盖”指令,它在我的代码中显示为 html 标记,最终将呈现为弹出窗口。在这个叠加层中,我想要一个各种输入的列表,它们是我模型中的“输入”数组,应该根据我模型中名为“类型”的参数呈现为文本框、下拉列表、复选框等. HTML 很简单:
<div ng-app="jsf">
<div ng-controller="MyCtrl">
<overlay inputs="inputs">
<div ng-repeat="input in inputs">
{{input.Type}}:
<userInput input="input">
</userInput>
</div>
</overlay>
</div>
</div>
我的指令如下:
.directive('overlay', function () {
return {
restrict: 'E',
transclude: true,
scope: {
inputs: '='
},
template: '<div>This is my overlay ...</div> <div ng-transclude></div> <div> ...my overlay has ended </div>'
};
})
.directive('userInput', function () {
return {
restrict: 'E',
scope: {
input: '='
},
template: '<div style="border: 1px solid black;">' + '<div style="background-color: gray">{{input.Parameter}}</div > ' + '</div>'
};
})
控制器只是将值放入“输入”数组中:
.controller('MyCtrl', function ($scope) {
$scope.inputs = [{
Type: 'textbox',
Parameter: 'myvalue'
}, {
Type: 'checkbox',
Parameter: true
}];
});
这段代码的输出是:
这是我的叠加层...文本框:复选框:...我的叠加层已结束
而我希望在“文本框”和“复选框”之后看到输入的“参数”值。所以,我的两个问题如下:
1)我在尝试将范围从覆盖继承到用户输入指令时做错了什么?2)这是更高级的东西,但这是我的目标:根据“输入”变量的“类型”值,为“用户输入”动态呈现不同模板的最佳方法是什么?
我有一个 JSFiddle 在这里显示我的问题:http: //jsfiddle.net/4fVkm/1/
非常感谢任何愿意帮助我的人
彼得罗