当前位置:  开发笔记 > 编程语言 > 正文

角度模板不显示ng-hide

如何解决《角度模板不显示ng-hide》经验,为你挑选了2个好方法。

我有一个角度指令,我用它来放置一个按钮形式.模板被隐藏,直到用户需要查看它.它是一个单独工作的简单模板,但是当我将它组合成更大的形式时,模板不会出现.

这是指令:

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

那么工作的HTML:

并且html片段不起作用:

Search by:

当我在更大的部分(由与模板无关的控制器控制)中运行此html时,我收到此错误:

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

所以只需将该模板函数包装在范围内.$ apply right?不.当我那样做的时候......

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

我收到此错误:

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

所以这显然是错误包装范围的问题,但不确定如何解决它.有什么想法吗?



1> hansmaad..:

看起来你不想为它创建双向绑定my-btn-arr.如果您只想将数据传递给指令而不是绑定到现有变量,请从属性参数中读取link.

.directive('buttonToggle', function() {
    return {
      restrict: 'A',
      scope: {},
      template: '',
      link: function(scope, elem, attr) {
        scope.myBtnArr = attr.myBtnArr;
        scope.myBtnTxt = ["AND", "OR", "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, 
link: function(scope, elem, attr) {
  // this will evaluate the expression against the scope
  scope.myBtnArr = $parse(attr.myBtnArr)(scope);
}

现在您可以将该指令用作

 

如果您确实想要使用双向绑定,则必须可以将值写回到使用表达式定义的路径中my-btn-arr.所以,如果你使用,scope: { myBtnArr: "=" }你必须使用带有可写表达式的指令,如下所示:

 

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



2> Deepak Sharm..:

而不是使用链接功能,请尝试在控制器功能下执行相同的操作。当您执行任何DOM操作时,需要使用链接功能,而您所需的控制器功能应该足够了。

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有