AngularJS - 在表达式中使用逗号或其他特殊字符来观察 $scope.$watch
AngularJS - Using a comma or other special character in expression to watch with $scope.$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>
我有一个指令是不久前写的,并且在我的整个应用程序中都被使用过。我现在意识到它需要一个手表,以便它可以在值更改时刷新和更新。
这是一个属性指令,用于根据用户的授权应用 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>