2017-07-13 36 views
0

我使用rest api从一个sharepoint组中获取用户,并且如果当前用户在该特定组中存在,窗体(视图)必须有一些额外的选项和按钮可见。因此,我使用$ watch来检测分配给rest api返回值的变量的变化,并在$ watch回调中定义视图中的变化。现在当Rest api返回$ watch函数时触发,但视图仍然没有更新。

如果我执行,

angular.element('[ng-controller=controllerName]').scope().$apply(); 
控制台

,那么我的形式加载罚款。

+0

使用范围$适用于手表... –

+0

我认为该页面在$ watch回调之前呈现。 –

+0

在setTimeOut中尝试$ apply()。 (请注意,setTimeOut不在此范围之内。) –

回答

0

如果您使用Angular的$ http服务进行请求,它将自动处理更新视图。如果您在没有它的情况下提出请求,则需要告知Angular数据已更改。

虽然你可以使用手表,它不是最好的方式来实现这一点。我建议使用$ http。如果你不能,只需在响应函数中调用$ timeout()。

而且,有关本: angular.element('[ng-controller=controllerName]').scope().$apply();

如果你在你的控制器内调用这一点,你可以简单地调用范围$适用(),无需访问DOM。尽管如此,这条线意味着您的整体方法存在问题。

+0

我正在使用$ q的angularjs来解决异步问题。但问题在于其余的调用和检查用户是否在页面加载时同时发生条件。所以有时甚至在诺言解决之前,正确的If条件变成假,并且它转到其他条件,并且根据这个其他条件呈现页面!所以我使用$ watch来进行变量更改,并且它会触发,所以正确的if条件会执行,但是页面在$ watch回调之前呈现并且它是空的。当我按下F12并在控制台中执行$ apply时,页面加载正常。即使$ watch回调中的$ apply也不起作用。 –