javascript - 将指令绑定(bind)到 Controller 属性

标签 javascript html angularjs ecmascript-6

这里是 Angular 新手:

我想有条件地隐藏我的 NavBar 指令,因此我添加了一个属性,如下所示:

 export function NavbarDirective() {

     'ngInject';

     let directive = {
         restrict: 'E',
         templateUrl: 'app/components/navbar/navbar.html',
         scope: {
             hidden: "="
         },
         controller: NavbarController,
         controllerAs: 'navBarVm',
         bindToController: true
     };

     return directive;
 }

 class NavbarController {

     constructor() {
         'ngInject';
     }
 }

并按如下方式使用它:

<lb-navbar hidden="main.loading"></lb-navbar>

但是当 main.loading变为 false,导航栏不会重新出现。我怎样才能解决这个问题?

现在,我只是将其包装在 div 中,如下所示:

<div ng-hide="vm.loading"> <lb-navbar hidden="main.loading"></lb-navbar> </div>

。 。但是,我正在寻找在指令中创建“按引用传递”绑定(bind)的正确方法。

最佳答案

这不是一个真正的 Angular 问题。

Since you've use hidden to hide element, need to remove hidden attr of your directive, rather than set hidden="false" when you want to reappear it.

<div hidden="true">1.div with hidden="true" (you cant see me)</div>

<br />

<div hidden="false">2.div with hidden="false" (you cant see me)</div>

<br />

<div>3.div without hidden attr (you can only see me)</div>

对于您的情况,有两种解决方案,

1.只需使用ng-hide替换hidden:

<lb-navbar ng-hide="main.loading"></lb-navbar>

2.另一个名称而不是隐藏来控制可见性:

您的指令:

let directive = {
     restrict: 'E',
     templateUrl: 'app/components/navbar/navbar.html',
     scope: {
         myhidden: "="
     },
     controller: NavbarController,
     controllerAs: 'navBarVm',
     bindToController: true,
     link:function(scope,element,attrs){
         scope.$watch('myhidden',function(nv,ov){
             nv ? element.hide() : element.show();
             return false;
         });
     }
 };

和标记:

<lb-navbar myhidden="main.loading"></lb-navbar>

关于javascript - 将指令绑定(bind)到 Controller 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37250185/

相关文章:

html - 从 Div 之间的 HTML TD 中获取值

html - 浏览器如何处理 HTML 中的 "<"?

javascript - 基于 d3 树的图表的 Angular 指令中的数据突变

angularjs - 需要等待 heroku-connect SFID

javascript - 使用 qml 读取多个 Xml 属性

javascript - JSON 数据未出现在 iOS 中的响应 header 中

Javascript 根据 if 语句更改 array[i],然后在每次运行函数时将其连接起来

javascript - Angularjs 指令

javascript - req.user是未定义的 Node +express+passport+mongoose

javascript - 在 HTML 中显示 $.post 的结果