javascript – Angular Template不显示ng-hide

前端之家收集整理的这篇文章主要介绍了javascript – Angular Template不显示ng-hide前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个角度指令,我用来放置一个按钮形式.模板被隐藏,直到用户需要看到它.它是一个简单的模板,它自己可以工作,但是当我将它组合成较大的模板时,模板不会出现.

这是指令:

.directive('buttonToggle',function() {
                return {
                    restrict: 'A',scope: {
                        myBtnArr: "="
                    },template: '<button ng-click="click()">{{ myBtnTxt[myBtnArr] }}</button>',link: function(scope) {
                        scope.myBtnTxt = ["AND","OR","NOT"];
                        scope.click = function() {
                            scope.myBtnArr = (scope.myBtnArr < 2 ? scope.myBtnArr + 1 : 0);
                        }
                    }
                };
            });

那么html的工作原理:

<div button-toggle my-btn-arr=0></div>

HTML代码段不起作用:

<tr ng-show="rowsShown >= 2"><td>Search by:</td><td><div button-toggle my-btn-arr=0></div><select ng-model="selection2" ng-options="option.text for option in options"></select><input type="text" size="20" ng-model="queryF2"><ng-md-icon icon="add_circle_outline" style="fill:#a9a9a9" ng-click="addSearchField();"></ng-md-icon> <ng-md-icon icon="remove_circle_outline" style="fill:#a9a9a9" ng-click="removeSearchField();"></ng-md-icon></td></tr>

当我在较大的部分(由与模板无关的控制器控制)运行这个html时,我得到这个错误

Error: [$compile:nonassign] Expression '0' used with directive 'buttonToggle' is non-assignable!

所以只需要在范围内包装该模板函数$apply right?不.当我这样做

link: function(scope) {
            scope.myBtnTxt = ["AND","NOT"];
            scope.click = function() {
                scope.$apply ( function() {
                    scope.myBtnArr = (scope.myBtnArr < 2 ? scope.myBtnArr + 1 : 0);
                })
            }
        }

我得到这个错误

Error: [$rootScope:inprog] $apply already in progress

所以这显然是一个问题,不正确的包围范围,但不知道如何解决它.有什么想法吗?

@R_301_323@

看来你不想为my-btn-arr创建一个双向绑定.如果只想将数据传递给指令而不是绑定到现有变量,请从链接属性参数中读取.
.directive('buttonToggle',function() {
    return {
      restrict: 'A',scope: {},template: '<button ng-click="click()">{{ myBtnTxt[myBtnArr] }</button>',link: function(scope,elem,attr) {
        scope.myBtnArr = attr.myBtnArr;
        scope.myBtnTxt = ["AND","NOT"];
        scope.click = function() {
          scope.myBtnArr = (scope.myBtnArr < 2 ? scope.myBtnArr + 1 : 0);
        }
      }
    }
  });

如果您还希望通过使用$parse作为输入传递变量的可能性.

// This won't work with an isolated scope,inherit from parent scope instead
scope : true,attr) {
  // this will evaluate the expression against the scope
  scope.myBtnArr = $parse(attr.myBtnArr)(scope);
}

现在可以使用该指令

<div button-toggle my-btn-arr="0"></div>
 <div button-toggle my-btn-arr="view.myValue"></div>

如果您真的想使用双向绑定,则必须将值写回到使用表达式my-btn-arr定义的路径中.所以,如果你使用范围:{myBtnArr:“=”}你必须使用这样的可写表达式的指令:

<div button-toggle my-btn-arr="view.myValue"></div>
 <!-- "0" is not assignable-->
 <div button-toggle my-btn-arr="0"></div>

示例:http://jsfiddle.net/Lw7ckt9x/1/

猜你在找的JavaScript相关文章