Javascript 在AngularJS中添加来自指令的指令,但保持ng模型绑定
此问题与以下问题关联: 在建议的答案中,有一个问题是ng模型并没有更新,因为元素是在指令中编译的。 我所期望的是,在我更改select选项后,ng模型将绑定到所选的项,但它不是。 有没有办法解决这个问题 普朗克: 具体而言:Javascript 在AngularJS中添加来自指令的指令,但保持ng模型绑定,javascript,angularjs,model-view-controller,angular-directive,Javascript,Angularjs,Model View Controller,Angular Directive,此问题与以下问题关联: 在建议的答案中,有一个问题是ng模型并没有更新,因为元素是在指令中编译的。 我所期望的是,在我更改select选项后,ng模型将绑定到所选的项,但它不是。 有没有办法解决这个问题 普朗克: 具体而言: <select ng-options="s for s in selects" ng-model="el" common-things> <option value=""></option> </select> {{
<select ng-options="s for s in selects" ng-model="el" common-things>
<option value=""></option>
</select>
{{el}}
{{el}}
在这里,无论我从select中选择什么选项,ng模型(el)始终具有相同的值
同样的问题是,如果我在指令内部有隔离作用域,例如:
<input type=text common-things ng-model="el.val" otherdata="something"/>
当我在输入中编写一些东西时,我期望{el.val}}会有那个值,但它不会被更新。您的附加指令为
元素创建了一个新的作用域。由于,属性el
最终位于指令的作用域,而不是父控制器的作用域。这是一个常见的陷阱,也是在角度绑定中始终使用点的主要原因
快速修复方法是将主控制器上的el
定义为对象,并设置对象的属性
$scope.el = {};
$scope.el.val=2;
<select ng-options="s for s in selects" ng-model="el.val" common-things>
$scope.el={};
$scope.el.val=2;
如果指令中有隔离作用域,该怎么办。对于instace:HTML:和我想要的,基于otherdata值添加多个指令。因此,我在common things指令中隔离了作用域,在这种情况下,在我在输入标记中写入内容时,ng模型(el.val)不会更新。如果在输入上隔离作用域,则即使您的
选择也不会绑定到元素。如果有必要隔离元素上的范围,则管理该元素的指令必须对该元素上使用的数据负全部责任;实现这一点的一种方法是将ng model
绑定到指令中的scope
。我可以在没有隔离作用域的情况下创建它吗?我试图做的是:根据传递给指令的数据的属性(输入上的属性“otherdata”),我想向该字段添加其他指令。例如,如果somedata.required=true,我想添加我所需的指令。另外,我希望在输入后添加html标记,并具有以下行为:如果某个函数(来自父作用域)的计算结果为true,我希望显示该标记。正因为如此,我有一个独立的作用域,我不知道如何将带参数的函数传递给指令,并在用户更改输入值时调用该函数。看起来您试图过度设计此解决方案。my required
做了什么正常的required
无法完成的事情?此外,如果您希望在输入之后有一个span,那么您可能应该在HTML中单独使用span,并使用ng if
或ng show
。如果这些都不起作用,那么您的下一个最佳选择就是生成一个“包装”指令,并使用转义来包含输入
,而不让输入成为指令的实际目标。