【发布时间】:2016-03-25 04:00:32
【问题描述】:
这对很多人来说都是小事,但我以前从未使用过 Angular,我需要帮助来完成一项简单的任务,因为我被困住了。
我的 ng-controller processctrl 声明了一个 load() 方法。
我的视图对ng-controller="processoctrl" 有两次调用,导致load() 方法运行两次。 processctrl 还有一个属性 currentPhase,它以 null 开头,load() 设置它的值。我可以只写($scope.currentPhase || load()) 来防止重复load(),但是与currentPhase 的绑定发生在转发器的顶部(在DOM 中)。
我可以将一个对象属性放入 $rootScope 并从 processoctrl.scope.load() 对其进行更新,但这会变得很疯狂。
我可以简单地将 $($(".headerCurrentPhase")[0]).html($scope.currentPhase) 放入我的 load() 方法中,但这也很疯狂。
我可以在别处将load() 重写为getProcesses = function(){} 和$rootScope.$emit('getProcesses',{}) 并写入控制器$rootScope.$on('getProcesses',getProcesses) 以防止这种双重load(),但我认为这是多余的,所以如何简单地调用控制器函数而不是加载()?或者如何实现这个简单的任务?使用指令?
查看:
<div ng-include src="'includes/overview-header.html'"></div>
<div ng-include src="'includes/process-info.html'"></div>
摘录includes/overview-header.html:
<div class="col-md-12">
....
<h4><strong>currentPhase</strong></h4>
<p ng-controller="processoctrl">
<span class="label label-primary headerCurrentPhase" ng-bind="currentPhase"></span>
</p>
</div>
includes/process-info.html的摘录:
<tbody ng-controller="processctrl">
<tr ng-repeat="Process in Processes|orderBy:'ID'">
<td>{{Process.isCurrent}}</td>
<td>{{Process.isCurrent}}</td>
<td>{{Process.ID}}</td>
<td>{{Process.Title}}</a></td>
</tr>
</tbody>
进程控制
(function (app) {
app.controller('processctrl', function ($scope, $rootScope, $routeParams, factorysvc) {
$scope.Processes = [];
$scope.currentPhase = null;
load();
//($scope.currentPhase || load())
function load() {
var promiseGet = factorysvc.getPsby($routeParams.itemId);
promiseGet.then(function (data) {
$scope.Processes = data;
$rootScope.root.empreendimento.currentPhase = $scope.currentPhase = data[0].currentPhase.Title;
}, function (err) {
$scope.Message = "Error " + err.status;
});
}
})}(angular.module('sgaapp')));
【问题讨论】:
标签: angularjs ng-bind angular-controller