gpt4 book ai didi

AngularJS - 在表达式中使用逗号或其他特殊字符来观察 $scope.$watch

转载 作者:行者123 更新时间:2023-12-02 03:20:29 27 4
gpt4 key购买 nike

我有一个指令是前一段时间写的,并在我的整个应用程序中使用。我现在意识到它需要一个 watch ,以便在值更改时刷新和更新。

这是一个属性指令,用于根据用户的授权应用 Angular 的 ngIf 指令。在 HTML 中使用它看起来像:

<div auth-if="id=12345;CREATE,READ,UPDATE"></div>

我遇到的问题是逗号 - 当我尝试查看 authIf 的属性值时出现错误

错误:[$parse:syntax] 语法错误:标记 ',' 是一个意外标记

现在我不知道为什么我不只使用字母 CRUD 但我不想更改指令接受的内容并可能破坏事物或引起困惑等。

所以我想知道是否有办法让 Angular 对逗号感到满意?

这是我的指令的简化版本:
angular.module("myApp").directive("authIf", ["ngIfDirective", "IsAuthorised", function(ngIfDirective, IsAuthorised)
{
var ngIf = ngIfDirective[0];

return {
restrict: "A",
priority: ngIf.priority - 1,
terminal: ngIf.terminal,
transclude: ngIf.transclude,
link: function(scope, element, attrs)
{
var permitted = false;
// run angular ngIf functionality
attrs.ngIf = function() {
return permitted;
};
ngIf.link.apply(ngIf, arguments);

scope.$watch(attrs.authIf, checkAuth);
function checkAuth() {
/** check goes here
permitted = IsAuthorised(...); **/
}
}
};
});

最佳答案

attrs.authIf是无效的表达式,您可以将其包装在一个函数中

scope.$watch(function() { return attrs.authIf; }, checkAuth);

工作 example
<!DOCTYPE html>
<html ng-app="app">

<head>
<script data-require="angular.js@1.4.7" data-semver="1.4.7" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.js"></script>

<script>
angular
.module('app', [])
.controller('appCtrl', function($scope) {
$scope.dir = 'initial value';
})
.directive('dir', function() {
return {
restrict: 'A',
scope: true,
link: function(scope, element, attrs) {
scope.$watch(function() {
return attrs.dir;
}, function(newValue) {
scope.custom = 'custom ' + newValue;
});
}
};
});
</script>
</head>

<body ng-controller="appCtrl">
<h1>Hello Plunker!</h1>

<div dir="id=12345;CREATE,READ,UPDATE">
{{ custom }}
</div>

<hr>

<div dir="{{ dir }}">
{{ custom }}
</div>

<input type="text" ng-model="dir">
</body>
</html>

关于AngularJS - 在表达式中使用逗号或其他特殊字符来观察 $scope.$watch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33906845/

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