angular 1.4指令切换视图

时间:2016-05-12 09:25:09

标签: angularjs angularjs-directive

我希望根据切换属性显示两个不同的输入。

不,我有问题,我应该在我的指令中定义输入的每个属性/属性,但绑定不起作用。

指令:

angular.module('directive')
.directive('inputBlock', function () {
    return {
        restrict: 'AEC',
        replace: true,
        scope: {
            model: '=',
            modernStyle:'=',
            name:'=',
            type:'=',
            label:'='
        },
        link: function (scope, elem, attrs, ctrl) {},
        templateUrl: 'views/templates/inputBlockTemplate.html'
    };
});

模板:

<div>
<div ng-if="!modernStyle">
<label>{{label}}</label>
<input ng-model="model" name="{{name}}" type="{{type}}"/>
</div>
 <md-input-container ng-if="modernStyle">
  <label>{{label}}</label>
  <input ng-model="model" name="{{name}}" type="    {{type}}"/>
</md-input-container>
</div>

用法:

 <input-block model="name" label="'firstname'" modern-style="true" name="'firstname'" type="'text'">
  </input-block>

是否可以执行类似指令切换的操作? 此外,是否可以将绑定重定向到指令?

1 个答案:

答案 0 :(得分:0)

ng-if创建一个新的子范围,尝试按ng-show/ng-hide

进行更改

Understanding Scopes

其他注意事项:

  • 当您在指令中使用名称,标签和类型作为文本时,它不一定是绑定,我建议使用@而不是=,或直接从{{1}访问它链接参数。
  • 可以将scope.model设置为ngModel以使用默认的angular指令。

使用Javascript:

attrs

模板:

angular.module("directive").directive("inputBlock", function () {
    return {
        restrict: "AEC",
        replace: true,
        scope: {    
            ngModel: "=",
            modernStyle:"@",
            //name:"@",
            //type:"@",
            //label:"@"
        },
    link: function (scope, elem, attrs, ctrl) {
         scope.type=attrs.type;
         scope.name=attrs.name;
         scope.label=attrs.label;
     },
    templateUrl: "views/templates/inputBlockTemplate.html"
    };
});

用法:

<div>
<div ng-show="!scope.modernStyle">
<label>{{scope.label}}</label>
<input ng-model="scope.model" name="{{scope.name}}" type="{{scope.type}}"/>
</div>
 <md-input-container ng-show="scope.modernStyle">
  <label>{{scope.label}}</label>
  <input ng-model="scope.model" name="{{scope.name}}" type={{scope.type}}"/>
</md-input-container>
</div>