Angularjs 检测角度指令中的不可赋值
我有一个指令,它将根据一个值获取/设置元素的焦点 当元素聚焦或模糊时,指令将更新布尔值。但是,有时我只想在满足条件时设置焦点,并使用不可赋值的值,这会引发以下错误:Angularjs 检测角度指令中的不可赋值,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我有一个指令,它将根据一个值获取/设置元素的焦点 当元素聚焦或模糊时,指令将更新布尔值。但是,有时我只想在满足条件时设置焦点,并使用不可赋值的值,这会引发以下错误: 错误:[$compile:nonassign]表达式“$last&&!与指令“focusWhen”一起使用的domain.url不可分配 (检查控制台是否有错误) 我理解它为什么会抛出错误,但是如何从指令内部检测不可分配的值,然后防止它附加焦点/模糊事件,这些事件试图在焦点改变时分配值 下面是与不可赋值的值一起使用的指令的示例用法
错误:[$compile:nonassign]表达式“$last&&!与指令“focusWhen”一起使用的domain.url不可分配代码>
(检查控制台是否有错误)
我理解它为什么会抛出错误,但是如何从指令内部检测不可分配的值,然后防止它附加焦点/模糊事件,这些事件试图在焦点改变时分配值
下面是与不可赋值的值一起使用的指令的示例用法。在这种情况下,如果中继器中的最后一个项目也是空值,那么它会将焦点设置在该项目上
<div ng-repeat="domain in domainList">
<input type="text" ng-model="domain.url" focus-when="$last && !domain.url"/>
</div>
已更新
检测这种情况的编程方法(而不是再增加一个属性)是使用$parse
fn。这是检查和抛出错误的方式。它尝试解析双向绑定属性,如果没有assign属性,则抛出错误<代码>($parse($attrs['focusWhen']).assign)
旧答案: 如果要设置回焦点值,可以再添加一个属性来指示吗
<input type="text" ng-model="domain.url" one-way="true" focus-when="$last && !domain.url"/>
$element.on("blur.focusWhen", function () {
if ($scope.focusWhen) {
$timeout(function () {
if (!$attr.oneWay) {
$scope.focusWhen = false;
}
});
}
});
$element.on(“blur.focusWhen”,函数(){
if($scope.focusWhen){
$timeout(函数(){
如果(!$attr.单向){
$scope.focusWhen=false;
}
});
}
});
我在考虑这个问题,我肯定会这么做,除非有一种程序化的方法来检测不可分配的值。也许我可以尝试在try/catch中分配值,但它抛出了一个我知道的错误?这看起来有点骇人听闻。看起来检测东西的编程方式是使用$parse fn。这是检查和抛出错误的方式。它尝试解析属性,如果没有assign属性,则抛出错误。($parse($attrs['focusWhen']).assign)。更新提琴啊是的,就是它!谢谢你!如果你将此作为答案发布,我会将其标记为正确。
<input type="text" ng-model="domain.url" one-way="true" focus-when="$last && !domain.url"/>
$element.on("blur.focusWhen", function () {
if ($scope.focusWhen) {
$timeout(function () {
if (!$attr.oneWay) {
$scope.focusWhen = false;
}
});
}
});