我试图从$ scope.watch函数返回多个值。
angular.module("MainApp")
.directive('isActiveNav', [ '$location', function($location) {
return {
restrict: 'A',
link: function($scope, el, attrs) {
$scope.location = $location;
$scope.$watch(function() {
return (el.parent().parent().parent().parent().hasClass('cbp-small'),location.path());
}, function(hasClas, currentPath) {
setTimeout(function(){
console.log(hasClas, currentPath);
},0)
});
}
};
}]);
但是这给了我这个错误Uncaught SyntaxError: Block-scoped declarations (let, const, function, class) not yet supported outside strict mode
。
我正在尝试在此处观看多个值: 1. APP的Current-Url 2.如果某个元素有一个名为" cbp-small"
的类我已经尝试了$ watchCollection和$ watchGroup,但也无法使它们正常工作。因此我试图从scope.watch func返回多个值。
答案 0 :(得分:2)
第一个参数不接受( )
语法中的两个值。相反,您希望存储要监视的值并在对象或数组中返回。
angular.module("MainApp")
.directive('isActiveNav', [ '$location', function($location) {
return {
restrict: 'A',
link: function($scope, el, attrs) {
$scope.location = $location;
$scope.$watch(
function() {
return {hasPath: el.parent().parent().parent().parent().hasClass('cbp-small'), currentPath: location.path()};
},
function(newPathObject, oldPathObject) {
if (!angular.equals(newPathObject, oldPathObject)) {
setTimeout(function(){
console.log(newPathObject.hasClass, newPathObject.currentPath);
},0)
};
},
true
});
}
};
}]);
您还想添加true
作为objectEquality == true的第三个参数。根据{{3}}:
当objectEquality == true时,watchExpression的不等式根据angular.equals函数确定。保存价值 对于稍后比较的对象,使用angular.copy函数。 因此,这意味着观看复杂的物体会产生不利影响 记忆和表现的影响。
此外,在使用$ watch时,您希望通过将对象包装在if
语句中并使用angular.equals
检查对象值是否已更改来阻止回调在对象实例化时触发。您可以使用Angular documentation。
答案 1 :(得分:0)
您可以连接值:
return el.parent().parent().parent().parent().hasClass('cbp-small').toString() + "&&&" + location.path();
那么将生成一个像"true&&&/.../.../"
这样的字符串
Angular将脏检查此字符串,如果任何值将更改该字符串将更改,则将调用回调
并在回调写
function(newVal) {
var args = newVal.split('&&&');
var hasClas = args[0]==="true", currentPath = args[1];
setTimeout(function(){
console.log(hasClas, currentPath);
},0
});