3

我的主要目标是通过单击复选框将密码的输入类型更改为文本。

理解 DOM 操作应该在指令中完成,并且在阅读AngularJS: can't change input type

我盯着我的指令如下( jsfiddle中包含的所有代码)

 <div ng-app="SignComponents">
     <bca-sign-up-password> </bca-Sign-Up-Password>
 </div>

但是我还没有真正使它起作用。. . 有什么建议么?我正在以有角度的方式解决它?

谢谢!

4

3 回答 3

3

首先,element.html是一个方法而不是一个属性,所以你覆盖了scope.$watch回调中的函数。其次,每个人(您自己、Angular、浏览器)都更容易更改输入类型:

http://jsfiddle.net/K6Qgm/6/

scope.$watch('viewPasswordCheckbox', function (newValue) {
    element.find('input')[1].type = newValue ? 'password' : 'text';
});

编辑:如果您确实需要支持旧版本的 IE(以上适用于 9),您可以将输入渲染两次并像这样显示/隐藏它:http: //jsfiddle.net/K6Qgm/7/

function (newValue) {
    var show = newValue ? 2 : 1,
        hide = newValue ? 1 : 2,
        elements = element.find('input');
    elements[hide].style.display = 'none';
    elements[show].style.display = '';
});
于 2013-04-18T17:38:23.443 回答
2

使用ng-hideandng-show比手动操作更好,对于指令模板可能是这样的:

<div>
  <input
    required
    type="text"
    name="password"
    class="input password"
    placeholder="Password"
    ng-hide="viewPassword"
    ng-model="user.Password"
  >
  <input
    required
    name="password"
    type="password"
    class="input password"
    placeholder="Password"
    ng-show="viewPassword"
    ng-model="user.Password"
  >
  <input type="checkbox" class="btn btn-mini" ng-click="showPassword()">
</div>

链接功能:

var linker = function(scope, element, attrs){
  scope.viewPassword = true;
  scope.showPassword = function(){
    scope.viewPassword = !scope.viewPassword;
  };
};

工作示例plunker

于 2013-04-19T14:13:58.547 回答
0

如何创建 2 个输入字段,一个输入类型=文本,第二个输入类型=密码指向相同的 ng-model=user.password”,并使用复选框(showpassword)来控制显示哪个输入。

<input ng-hide="showpassword" type="password" name="password" class="form-control" placeholder="Password"   ng-model="user.password" />
<input ng-show="showpassword" type="text" name="password" class="form-control" ng-model="user.password" />
<input type="checkbox" ng-model="showpassword" ng-checked="false"> Show Password
于 2013-12-23T23:42:58.400 回答