[英]Bind AngularJS controller data to view
我刚开始接触角度,可能会缺少一些基准。 我想结合我的看法是说给控制器的数据在这里 。 如果是棱角分明,那么所有的怒火都不应该是一个复杂的情况。 这是我的app.js:
var app = angular.module('nwMetrics', []);
app.controller('MetricsController', ['$scope', function($scope){
$scope.beanstalks = [{ time: "12:00", type: "beanstalk-stable" }];
$.eventsource({
label: "json-event-source",
url: "/data/beanstalk",
dataType: "json",
open: function() {
console.log( "opened connection" );
},
message: function( data ) {
$scope.beanstalks.push(data);
console.log( $scope.beanstalks );
// $.eventsource("close", "json-event-source");
}
})
}]);
我的观点是:
<html lang="en" ng-app="nwMetrics">
...
<div ng-controller="MetricsController">
<div class="env row" ng-repeat="beanstalk in beanstalks">
<h3>
{{beanstalk.time}}
<em class="pull-right">{{beanstalk.type}}</em>
</h3>
</div>
</div>
事件源将接收SSE事件,并应每秒将新的obj推送到$ scope.beanstalks。 登录控制台显示预期的结果,每秒打印一个不断增长的数组,但视图不是-仅显示$ scope.beanstalks的初始值,它保持静态。
我也试图将$ .eventsource移到控制器之外,但是我怎么在js上调用控制器呢? app.controller('MetricsController')。beanstalks或app.MetricsController.beanstalks没有帮助。 (这也可能有一个简单的答案,但是我只能找到如何通过html访问它。)
提前致谢
我猜$.eventsource
不使用AngularJS吗? 如果是这样,Angular不知道$scope.beanstalks
已经更改。
因此可以在message
回调的末尾添加: $scope.$digest()
来强制Angular更新自身
或(可能是首选):使用$http
Angular服务与“ / data / beanstalk”进行交互。
如果$ .eventsource是AngularJS外部的某些代码(不是AngularJS服务或其他可通过AngularJS依赖注入注入的代码),那么这可以工作(我已经添加了$ scope。$ apply()调用):
var app = angular.module('nwMetrics',[]);
app.controller('MetricsController', ['$scope', function($scope){
var mcontroller = this
$scope.beanstalks = [{ time: "12:00", type: "beanstalk-stable" }];
$.eventsource({
label: "json-event-source",
url: "/data/beanstalk",
dataType: "json",
open: function() {
console.log( "opened connection" );
},
message: function( data ) {
$scope.$apply(function() {
$scope.beanstalks.push(data);
console.log( $scope.beanstalks );
// $.eventsource("close", "json-event-source");
});
}
})
}]);
请让我知道这是否适合您的情况。
什么是$ scope。$ apply,我们应该在这里使用它吗? 几个链接:
如果您确定没有父作用域需要更新$ scope.beanstalks,也可以使用$ scope。$ digest()。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.