0

我整天都在寻找答案,但似乎无法做到这一点。

通过单击编辑按钮,我将范围值 profile_edit_mode 设置为 true 或 false。然后,此值会激活表单上的 ng-hide 和 ng-show。

当我将其移至自定义指令时,ng-hide 或 ng-show 将不起作用。

我有以下。

HTML 代码

<bos-input fieldname="firstname" title="First Name" place-holder="First Name" ng-model="user_profile_details.firstname" edit-mode="{{profile_edit_mode}}"></bos-input>

自定义指令。

enter code hereangular.module('aesthetics')
.directive('bosInput', function(){
    return {
        restrict: 'E',
        require: 'ngModel',
        template: '<div class="form-group">' +
                    '<label for="{{fieldname}}" class="col-lg-3 control-label">{{title}}</label>' +
                        '<div class="col-lg-9">' +
                        '<input ng-show="editMode" class="form-control" id="{{fieldname}}" ng-model="ngModel" placeholder="{{placeHolder}}">' +
                        '<div class="m-t-xs" ng-hide="editMode">{{ngModel}}</div>' +
                    '</div>' +
                  '</div>{{editMode}}',
        scope: {
            fieldname: '@',
            placeHolder: '@',
            title: '@',
            editMode: '@',
            ngModel: '='
        }
    }

})

表单输入正确呈现,除 ng-show 或 ng-hide 外,其他一切正常。

我已经输出了 editMode 的值,以检查它是否正确更新。

任何帮助将不胜感激。

非常感谢布伦特

4

1 回答 1

1

而不是使用作为字符串@传递的 use ,它将以两种方式绑定实际值。profile_edit_mode=

<bos-input ... edit-mode="profile_edit_mode"></bos-input>

指示

.directive('bosInput', function(){
    return {
        // Previous code...
        scope: {
            fieldname: '@',
            placeHolder: '@',
            title: '@',
            editMode: '=',
            ngModel: '='
        }
    }

})

这是有效的,因为当您使用@并传递一个字符串时,'false'仍然评估为真。

于 2015-10-20T16:19:42.767 回答