Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS$watch变量和重新评估ng类表达式_Javascript_Angularjs_Angularjs Directive_Ng Class - Fatal编程技术网

Javascript AngularJS$watch变量和重新评估ng类表达式

Javascript AngularJS$watch变量和重新评估ng类表达式,javascript,angularjs,angularjs-directive,ng-class,Javascript,Angularjs,Angularjs Directive,Ng Class,我正在尝试在我的应用程序中实现一个类似书签的函数,并且必须观察一个变量,该变量存储所有书签ID。基于该变量,我必须告诉ng class重新评估它的函数表达式,以便添加或不添加已添加书签的类get 当变量$scope.Bookmarks发生更改时,如何告诉ng class再次运行 <a ng-repeat="event in events" ng-class="isBookmarked(event.id)" class="icon__bookmark"></a>

我正在尝试在我的应用程序中实现一个类似书签的函数,并且必须观察一个变量,该变量存储所有书签ID。基于该变量,我必须告诉
ng class
重新评估它的函数表达式,以便添加或不添加已添加书签的类
get

当变量
$scope.Bookmarks
发生更改时,如何告诉
ng class
再次运行

<a ng-repeat="event in events"
   ng-class="isBookmarked(event.id)"
   class="icon__bookmark"></a>

如果在angular处理的代码中更改了书签ID(例如控制器、指令、服务、$http回调等),那么您根本不需要做任何事情。Angular将在需要时自动重新计算
isBookmarked(event.id)
,以确保UI始终是最新的

如果出于某种原因,更新必须在angular处理的代码之外完成(例如在外部库中),则可以手动强制angular进行更新。但是,强烈建议只确保代码由angular处理。你通常可以这样做,但这要视情况而定

如果需要强制执行,请按如下方式使用
$scope.$apply

$scope.$apply(function() {
  // Write code here to update bookmark ID's
});

假设要将名为“bookmarked”的类添加到锚标记中,并且isBookmarked返回一个布尔值,请使用以下()命令:

{{event.name}

如果书签数组位于控制器内,则不必调用$apply,请参阅我提供的小提琴。

尝试
$route.reload()
。它适用于在加载页面时只计算一次的指令(如使用JQuery进行DOM操作的类型)。

这与JQuery有何关系?是否在更新书签时不会调用isBookmarked(event.id)。共享更多信息,控制器代码。angularJs会在范围发生任何变化时自动调用isBookmarked。这对我很有用!出于某种原因,我的ngClass没有重新评估我的scope.currentTime变量。ng class=“{cliptexthighlight:amHighlighted(currentTime,clipText)}”,所以我加入了:$scope.$apply(函数(){$scope.currentTime=currentTime;});如果
$scope.currentTime=currentTime,这就迫使ngclass重新计算Yes
是在angular没有调用的代码段中完成的(对我来说,这通常意味着它是在常规JS回调函数(如事件处理程序)中完成的),那么UI将不会用作用域上的新值更新。这时您必须使用
$scope.apply
,正如您所做的:)
<a ng-repeat="event in events" 
   ng-class="{bookmarked: isBookmarked(event.id)}" 
   class="icon__bookmark">{{event.name}}</a>