Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS指令:将属性值直接替换到模板中_Javascript_Angularjs_Twitter Bootstrap_Angularjs Directive - Fatal编程技术网

Javascript AngularJS指令:将属性值直接替换到模板中

Javascript AngularJS指令:将属性值直接替换到模板中,javascript,angularjs,twitter-bootstrap,angularjs-directive,Javascript,Angularjs,Twitter Bootstrap,Angularjs Directive,我一直在尝试开发一个AngularJS指令,它输出一个带标签的表单字段 我希望能够使用如下标签: <simpleTextField bind="user.email" label="Email" name="email" placeholder="Enter email address"></simpleTextField> 这将生成以下(引导)HTML输出: <div class="form-group"> &l

我一直在尝试开发一个AngularJS指令,它输出一个带标签的表单字段

我希望能够使用如下标签:

<simpleTextField bind="user.email" label="Email" name="email" 
                 placeholder="Enter email address"></simpleTextField>

这将生成以下(引导)HTML输出:

<div class="form-group">
  <label class="col-sm-2 control-label" for="email">Email</label>
  <div class="col-sm-10">
    <input type="text" class="form-control" name="email" 
           ng-model="user.email" placeholder="Enter email address">
  </div>
</div>

电子邮件
正如您所看到的,这些属性既包括定义绑定的属性,也包括将其值直接替换到HTML模板中的属性

我想把它包好。换句话说,我不想为了适应这个指令的使用而修改视图的控制器

我所看到的示例中没有一个满足我的要求,因为(1)它们没有将属性值直接替换到模板中,和/或(2)它们依赖于用于修改指令的视图的控制器


请注意,我是AngularJS的新手,所以我可能在这里完全偏离了轨道。

我想我已经做了一些应该有用的东西。 您可以传入值以直接绑定到模板,并且指令不知道父级的模型。 HTML+指令:

<div ng-controller="MyCtrl">
    <label>Parent Scope Email:{{email}}</label></br>
    <simple-text-field simple-bind-to="email" simple-label="Email" simple-name="email" 
             simple-placeholder="Enter email address" simple-dynamic-scope="user.email">
    </simple-text-field>
</div>
var myApp = angular.module('myApp',[]);

myApp.directive('simpleTextField', function() {
    return {
        restrict: 'E',
        scope: {
            simpleBindTo: "=",
            simpleLabel: "@simpleLabel",
            simpleName: "@simpleName",
            simplePlaceholder: "@simplePlaceholder",
        },
        template: '<div class="form-group">' +
        '  <label class="col-sm-2 control-label" for="{{simpleName}}">{{simpleLabel}}</label>' +
        '  <div class="col-sm-10">' +
        '    <input type="text" class="form-control" name="{{simpleName}}" ' +
        '        placeholder="{{simplePlaceholder}}" ng-model="simpleBindTo" >' +
        '  </div>' +
        '</div>'
    };
});

myApp.controller('MyCtrl', function ($scope) {
    $scope.email = '';
});

父作用域电子邮件:{{Email}
该指令:

<div ng-controller="MyCtrl">
    <label>Parent Scope Email:{{email}}</label></br>
    <simple-text-field simple-bind-to="email" simple-label="Email" simple-name="email" 
             simple-placeholder="Enter email address" simple-dynamic-scope="user.email">
    </simple-text-field>
</div>
var myApp = angular.module('myApp',[]);

myApp.directive('simpleTextField', function() {
    return {
        restrict: 'E',
        scope: {
            simpleBindTo: "=",
            simpleLabel: "@simpleLabel",
            simpleName: "@simpleName",
            simplePlaceholder: "@simplePlaceholder",
        },
        template: '<div class="form-group">' +
        '  <label class="col-sm-2 control-label" for="{{simpleName}}">{{simpleLabel}}</label>' +
        '  <div class="col-sm-10">' +
        '    <input type="text" class="form-control" name="{{simpleName}}" ' +
        '        placeholder="{{simplePlaceholder}}" ng-model="simpleBindTo" >' +
        '  </div>' +
        '</div>'
    };
});

myApp.controller('MyCtrl', function ($scope) {
    $scope.email = '';
});
var myApp=angular.module('myApp',[]);
myApp.directive('simpleTextField',function(){
返回{
限制:'E',
范围:{
simpleBindTo:“=”,
simpleLabel:“@simpleLabel”,
simpleName:“@simpleName”,
simplePlaceholder:“@simplePlaceholder”,
},
模板:“”+
“{{simpleLabel}}”+
'  ' +
'    ' +
'  ' +
''
};
});
myApp.controller('MyCtrl',函数($scope){
$scope.email='';
});
通过使用“=”访问修饰符,ng模型可以被指定为父作用域的变量成员,而指令对该变量一无所知


是上述示例的JSFIDLE。

非常感谢!我试过了,它呈现了控件,但是控件之后什么都没有。例如,我只是将文本“Hello”放在下一行,但它没有显示。哦,这只是HTML中的end标记有问题。应该是,而不是。在我注意到它工作得很好之后。再次感谢!我尝试过使用CaspNZ在下面建议的基本方法,但我无法让它正常工作。例如,它只会替换前两个变量(这看起来很奇怪),然后我注意到它似乎会以某种方式干扰表单上的其余控件。我不确定它是否损坏了范围或其他东西。当我尝试下面CaspNZ的代码时,它完全删除了表单上的所有其他内容。实际上CaspNZ的代码中有一个类型(不正确的结束标记)。当我修复它时,效果很好。CaspNZ现在已经修复了拼写错误,所以一切都很好。