控制器多次返回值
Controller returning value multiple times
我正在使用 AngularJS 为 <iframe>
插入 src
属性。
但出于某种原因,每当我调用 grab 这个值时,它都会返回多次。我知道这一点是因为在解决方案工作之前我正在检查使用 console.log(src)
进行调试。
这个小故障似乎没有导致任何错误(或减慢我的应用程序速度),但我很想知道发生了什么?
更新
通过将大部分工作转移到我的自定义 recentStations
服务(如果需要,可用),我减少了控制器中的代码。
HTML 视图中的结果仍然相同,返回多个结果的行为也是如此。
控制器
app.controller('contentCtrl', ['$scope', 'recentStations', function($scope, recentStations){
$scope.getCurrentSrc = function(){
return recentStations.getCurrentSrc();
};
}]);
HTML
<div id="content" data-ng-controller="contentCtrl">
<iframe data-ng-src="{{ getCurrentSrc() }}" seamless></iframe>
</div>
此行为是由 angularjs 脏检查引起的。
AngularJS 实现双向数据绑定的脏检查。
解决额外函数调用的一种潜在方法是绑定到一个简单值,在您的例子中是 src
,然后对依赖值使用 $watch
来重建它。
这是您的控制器的示例:
$scope.$watch(getLink, buildSource);
function getLink(){
return recentStations.getCurrent().link;
}
function buildSource(link){
var url = 'http://iris2.rail.co.uk/tiger/';
var src = url + link;
$scope.src = $sce.trustAsResourceUrl(src);
};
HTML 将绑定如下:
<iframe data-ng-src="{{ src }}" seamless></iframe>
但是,您仍在每个 $digest 执行一次(较小的)函数调用;现在是每次调用 getLink
函数。这是因为您似乎必须调用 recentStations.getCurrent()
才能获得 link。如果有办法将其值绑定到 src,则可以在每个 $digest 周期简单地检查它。
我正在使用 AngularJS 为 <iframe>
插入 src
属性。
但出于某种原因,每当我调用 grab 这个值时,它都会返回多次。我知道这一点是因为在解决方案工作之前我正在检查使用 console.log(src)
进行调试。
这个小故障似乎没有导致任何错误(或减慢我的应用程序速度),但我很想知道发生了什么?
更新
通过将大部分工作转移到我的自定义 recentStations
服务(如果需要,可用),我减少了控制器中的代码。
HTML 视图中的结果仍然相同,返回多个结果的行为也是如此。
控制器
app.controller('contentCtrl', ['$scope', 'recentStations', function($scope, recentStations){
$scope.getCurrentSrc = function(){
return recentStations.getCurrentSrc();
};
}]);
HTML
<div id="content" data-ng-controller="contentCtrl">
<iframe data-ng-src="{{ getCurrentSrc() }}" seamless></iframe>
</div>
此行为是由 angularjs 脏检查引起的。 AngularJS 实现双向数据绑定的脏检查。
解决额外函数调用的一种潜在方法是绑定到一个简单值,在您的例子中是 src
,然后对依赖值使用 $watch
来重建它。
这是您的控制器的示例:
$scope.$watch(getLink, buildSource);
function getLink(){
return recentStations.getCurrent().link;
}
function buildSource(link){
var url = 'http://iris2.rail.co.uk/tiger/';
var src = url + link;
$scope.src = $sce.trustAsResourceUrl(src);
};
HTML 将绑定如下:
<iframe data-ng-src="{{ src }}" seamless></iframe>
但是,您仍在每个 $digest 执行一次(较小的)函数调用;现在是每次调用 getLink
函数。这是因为您似乎必须调用 recentStations.getCurrent()
才能获得 link。如果有办法将其值绑定到 src,则可以在每个 $digest 周期简单地检查它。