【问题标题】:How use controller variable inside a AngularJs directive如何在 AngularJs 指令中使用控制器变量
【发布时间】:2016-10-02 16:41:50
【问题描述】:

如何在指令中使用控制器变量。我在指令的范围内使用了 popoverHtml 但是当我添加这种类型时不起作用:

像这样:范围:{ popoverHtml:'@',类型:@},

我的 html 是:

 good <input type='radio' name='type' value='good' data-ng-model='type' 
data-ng-change='change(type)' />
    bad <input type='radio' name='type' value='bad' data-ng-model='type'
 data-ng-change='change(type)' />
        <next-level id='pop' popover-html='{{typeMessage}}'></next-level>

我的控制器是:

var app = angular.module('plunker', []);

app.controller('MainCtrl', function($scope) {
  $scope.typeMessage = 'PopOverTest';
  $scope.type = false;
  $scope.change = function(type){
    if(type == 'good'){
      $scope.typeMessage = 'very good';
    }else if(type == 'bad'){
      $scope.typeMessage = 'very bad';
    }
  };
});

我的指令:

    app.directive('nextLevel', function () {
            return {
                restrict: 'EA',
                scope:{ popoverHtml:'@'},
           template: '<a ui-sref="register" tabindex="0" linkdisabled="{{type}}" 
 class="btn btn-block btn-success ng-class: {disabled: !(type)}" role="button" >next</a>',
                link: function (scope, el, attrs){
                  $(el[0]).popover({
                        trigger: 'click',
                        html: true,
                        toggle:'popover',   
                        title: 'notice !!',
                        content: scope.popoverHtml,  // Access the popoverHtml html
                        placement: 'bottom'
                    });

                  attrs.$observe('popoverHtml', function(val){
                    $(el[0]).popover('hide');
                    var popover = $(el[0]).data('bs.popover');
                     popover.options.content = val;
                    console.log(popover); 
                  })


                } 
            };   
        });

演示https://plnkr.co/edit/wfC4DrTIp8fRIs6hEEDa?p=preview

【问题讨论】:

  • 为什么不用ui-bootstrappopover?
  • 强烈建议您摆脱 bootstrap.js 并使用 angular-ui-bootstrap。不要试图重新发明轮子
  • 它对我有用。我错过了什么吗?

标签: javascript html angularjs angularjs-directive angular-ui-router


【解决方案1】:

如果您想在ng-class 中使用它,您不能将type 作为@ 绑定发送到指令。如果您对主控制器中的type 进行更改,它们将不会反映在指令内的ng-class 中。看看here

为了反映ng-class 中的更改,您必须将其作为= 绑定传递。

Plunkerhere

【讨论】:

  • 您可以尝试在将名称传递给指令时更改名称吗?我将其命名为按钮。做类似的事情
  • 我不认为这是 AngularJS 的问题
  • 你能显示你当前的html、指令、控制器代码吗?
  • 在您提供的 plunker 中,您有 &lt;next-level id='pop' popover-html='{{typeMessage}}' button='button'&gt;&lt;/next-level&gt; 。您在实际代码中是否有这行代码?我看到您正在尝试将 button 对象传递给指令,但我在 mainCtrl 中看不到任何 $scope.button 对象。我只看到$scope.buy..
  • 您的&lt;next-level id='pop' HTML 现在看起来如何?你能展示一下吗?您现在可以在 UI 中看到按钮吗?您提供的 Plunker 不显示按钮..
猜你喜欢
  • 2019-01-26
  • 1970-01-01
  • 2021-02-07
  • 1970-01-01
  • 1970-01-01
  • 2013-03-18
  • 1970-01-01
  • 2015-01-11
  • 1970-01-01
相关资源
最近更新 更多