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;
                }
            });
        }
    });