gpt4 book ai didi

angularjs - 检测 Angular 指令中不可分配的值

转载 作者:行者123 更新时间:2023-12-02 03:25:01 26 4
gpt4 key购买 nike

我有一个指令,它会根据值获取/设置元素上的焦点。

当元素聚焦或模糊时,指令将更新 bool 值。但是,有时我只想在满足条件时设置焦点,而我使用了不可分配的值,这会引发此错误:

错误:[$compile:nonassign] 与指令“focusWhen”一起使用的表达式“$last && !domain.url”不可分配!

WORKING DEMO HERE (检查控制台是否有错误)

我明白它为什么会抛出错误,但是我如何从指令内部检测不可分配的值,然后阻止它附加焦点/模糊事件,这些事件试图在焦点改变时分配值?


下面是指令与不可赋值值一起使用的示例用法。在这种情况下,如果它也是空白值,它将把焦点设置在转发器中的最后一项上

<div ng-repeat="domain in domainList">
<input type="text" ng-model="domain.url" focus-when="$last && !domain.url"/>
</div>

这是指令代码;

testApp.directive("focusWhen", ["$timeout", function ($timeout) {

function getLink($scope, $element) {
$scope.$watch("focusWhen", function (val) {
//only focus when needed and when this element doesn't already have focus
if (val && $element[0] !== document.activeElement) {
//Small delay needed before we can get focus properly
$timeout(function () {
$element.focus();
});
}
});
$element.on("blur.focusWhen", function () {
if ($scope.focusWhen) {
$timeout(function () {
$scope.focusWhen = false;
});
}
});
$element.on("focus.focusWhen", function () {
if (!$scope.focusWhen) {
$timeout(function () {
$scope.focusWhen = true;
});
}
});
}

return {
restrict: "A",
scope: {
focusWhen: "="
},
link: getLink
};
}]);

最佳答案

已更新

检测这一点的程序化方法(而不是多一个属性)是使用 $parse fn。这就是 angular 检查并抛出错误的方式。它尝试解析双向绑定(bind)属性,如果它没有分配属性,则会抛出错误。 ($parse($attrs['focusWhen']).assign).

http://jsfiddle.net/cw7fftfx/


旧答案:

如果要设置焦点值,再添加一个属性怎么样?

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

http://jsfiddle.net/j1v6jk8k/3/

关于angularjs - 检测 Angular 指令中不可分配的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30866739/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com