angularjs控制器访问指令范围值

问题描述:

我有这个控制器与我的HTML代码中的指令。该指令具有我希望从父控制器访问并显示在html中的范围值。希望我的示例代码能够给你一个我想要实现的简单概述。angularjs控制器访问指令范围值

我知道这项工作使用$ rootScope.showvalue ='传递文本';在指导作品中,但不知道这是否是最好的解决方案。

app.directive('customdir', [function() { 
    return { 
    restrict: "E", 
    scope:  {  
     showvalue: "=" 
    }, 
    link: function(scope, el, attrs) { 
     scope.showvalue = 'pass text'; 

    } 
    }; 
}]); 

app.controller('mycontroller', function($scope) { 
    alert($scope.showvalue); 
}); 



<html> 
    <div ng-controller="mycontroller"> 
     <custom-dir></custom-dir> 

      /* Show scope value from custom dir */ 

      {{showvalue}} 
    </div> 
    </html> 

既然你绑定指令的分离scope属性通过showvalue双向绑定,你可以简单的通过作为一个属性

<customdir showvalue="showvalue"></customdir> 

<p>{{showvalue}}</p> 

演示〜http://plnkr.co/edit/W5k0hgDElklseOvjwRsS?p=preview


父作用域属性

如果您希望HTML为<custom-dir>,则需要更改e您的指令'customDir'

+0

由于某种原因,只有$ rootScope.showvalue ='pass text';作品。也许是因为控制器和指令是在两个单独的文件 – icode

+0

你看看演示?它显然有效。分离文件没有区别 – Phil

+0

是的,你的演示很好的清晰的例子。只是我的代码不工作。我想也许控制器是如何设置的。 – icode

  1. 您可以通过属性将“showvalue”传递给指令。
  2. 您可以通过指令作用域的$ parent属性来设置值。例如。范围。$ parent.showvalue ='传递文字';
  3. 您可以使用emit事件将数据从子(指令)传递给父(控制器)。
  4. 您可以使用共享作用域直接将值设置为控制器作用域。 (不要在指令中指定范围属性)