【问题标题】:Isolate and shared scope same time in directive AngularJS在指令AngularJS中同时隔离和共享范围
【发布时间】:2015-07-23 19:52:00
【问题描述】:

Angular 新手,所以不确定我是否以正确的方式提出问题。

所以我有形式。

<form ng-controller="myController" action="" method="get">
    <div myDirective> 
       <input ng-model="question.sex" value="male" type="radio">
       <input ng-model="question.sex" value="female" type="radio">
       <button ng-click="log(LogThisQuestionAnsware())"></button>
    </div>
    <div myDirective> 
       <input ng-model="question.agree" value="no" type="radio">
       <input ng-model="question.agree" value="yes" type="radio">\
       <button ng-click="log(LogThisQuestionAnsware())"></button>
    </div>
</form>

所以我的目标是记录当前的“问题”答案。点击按钮。

如何在 myDirective 中访问本地问题,与我的第二个指令分开,并且也可以在控制器范围内。

--[ 编辑:]--

好的,这几乎就是我的场景。 http://jsfiddle.net/y5esnm09/5 如果选中,每个按钮都必须记录自己的指令值,而不是两个单选值。

【问题讨论】:

  • 两个指令是否必须绑定到同一个问题对象但有自己的范围,彼此分开?
  • 是的,我认为这就是我想要的

标签: angularjs controller scope directive angular-directive


【解决方案1】:

如果我正确理解了您的问题,您希望两个指令实例都绑定到同一个问题对象,但它们的范围彼此分开:

在指令和控制器之间设置双向数据绑定,例如:

<div my-directive question="question">
 <!-- the rest -->

angular.module('your.module').directive('myDirective', function() {
   return {
      scope: question: '=',
       //other props
   }

这将确保两个指令都绑定到同一个问题对象,但有自己独立的范围。

另一种方法是将scope 属性设置为true,这样它们都将创建控制器的子范围。

编辑:小提琴演示两种方式绑定:

http://jsfiddle.net/L0eqf4qe/

PS:我将myDirective 转换为my-directive,angular 会为你将snake-case 转换为camelCase。

【讨论】:

  • angular.module('YourFinancialAdvisor').directive('myDirective', function() { return { scope: {question: '='}, link: function(scope, el, attrs) { $(el).on('click', function(e) { console.log(scope.question); }) }, }; }); !!问题未定义!可能我可以使用 attrs。
  • @СвободенРоб 它不应该是未定义的,你能发布你的控制器代码吗?
  • @СвободенРоб 我加了一个小提琴
  • 感谢您的帮助。好的,这几乎是我的场景。 jsfiddle.net/y5esnm09/5 问题是,如果在按钮上选择了两个单选,则单击具有两个值的获取问题对象。我需要彼此分开。这可能吗?
  • @СвободенРоб 当然,他们使用两个值记录问题对象,您将它们绑定到同一个对象。如果你想在每个指令中使用不同的值,你将不得不将它们绑定到单独的对象
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-27
  • 1970-01-01
  • 2015-12-08
  • 1970-01-01
  • 1970-01-01
  • 2019-10-21
相关资源
最近更新 更多