在指令中使用ngShow

时间:2014-12-14 22:20:04

标签: angularjs

我正在创建一个带有ngShow语句的指令,该语句取决于我想要传递的某些属性/条件。当我对ng-show进行硬编码时,它工作正常,但如果我尝试将值分配给范围,那么添加到模板它不会响应我的表单。渲染的html与我的源完全相同。

// Works
app.directive('message', function($filter, moment) {
  return {
    restrict: 'EA',
    template: '<div ng-show="forms.resetForm.$pristine && forms.resetForm.$submitted && forms.resetForm.$invalid" ng-transclude></div>',
    replace: true,
    transclude: true,
    link: function(scope, element, attrs, ctrl, transclude) {

    }
  };
});


// No workie
app.directive('message', function($filter, moment) {
  return {
    restrict: 'EA',
    template: '<div ng-show="{{ show }}" ng-transclude></div>',
    replace: true,
    transclude: true,
    link: function(scope, element, attrs, ctrl, transclude) {
      scope.show = 'forms.resetForm.$pristine && forms.resetForm.$submitted && forms.resetForm.$invalid';
    }
  };
});

如何指定动态ngShow语句?

2 个答案:

答案 0 :(得分:0)

您似乎不了解指令属性的工作原理。 ng-show需要一个布尔表达式,在范围上进行评估。所以,如果你想把这个复杂的布尔表达式放在JS代码中而不是直接放在模板中,它应该是:

template: '<div ng-show="shouldShow()" ng-transclude></div>'
...
scope.shouldShow() = function() {
    return scope.forms.resetForm.$pristine && 
           scope.forms.resetForm.$submitted && 
           scope.forms.resetForm.$invalid;
}

答案 1 :(得分:0)

找到它 - 使用ngShow

app.directive('message', function() {
    return {
      restrict: 'EA',
      template: '<div class="alert alert-danger" ng-show="" ng-transclude></div>',
      replace: true,
      transclude: true,
      compile: function(element, attrs) {
        attrs.ngShow =  'forms.resetForm.$pristine && forms.resetForm.$submitted && forms.resetForm.$invalid';
      }
    };
  });