【发布时间】:2016-09-02 04:17:40
【问题描述】:
我正在编写的一个小应用程序上有多个控制器,并且我已经成功地在控制器之间共享了一个“选定”变量,就像这样。
app.service('selectedEmployee', function () {
var selected = null;
return
{
getSelected: function() {
return selected;
},
postSelected: function(employee) {
selected = employee;
}
};
});
我有一个带有员工列表的侧导航栏。当我点击一个员工时,我调用 postSelected 函数,然后调用 getSelected 来设置 $scope.selected。
$scope.selectEmployee = function(employee) {
//Calling Service function postSelected
selectedEmployee.postSelected(employee);
$scope.selected = selectedEmployee.getSelected();
if ($mdSidenav('left').isOpen()) {
$mdSidenav('left').close();
}
}
我的主要内容区域有第三个控制器,这就是我不知道该怎么做的地方。我希望显示来自所选员工的信息,但 Angular 在第一个员工有机会被设置为选中之前编译整个页面,并且员工的后续选择不会重新加载主要内容页面(因为我没有我想告诉他们)。这是我的主要内容控制器:
app.controller('mainContentController', ['$scope','selectedEmployee',
function ($scope, selectedEmployee) {
$scope.selected = selectedEmployee.getSelected();
console.log($scope.selected);
}
]);
我现在的主要内容视图非常简单
<h2>{{selected.firstName}}{{selected.lastName}}</h2>
我的问题是如何告诉控制器有效地更新其局部视图,以便在我选择员工时显示信息。
【问题讨论】:
-
你的问题很难理解。但不用担心,这可能是我的错,或者它是一种难以理解的问题。如果你可以将所有代码推送到一个简单的 plunker 会更好...... plnkr.co/edit .. 并分享你的 Plunk和我们一起!
-
我会马上解决这个问题,好建议。
-
将这个问题转换为可用的 plunker 并不像我想象的那么容易。我在上面的仓库中添加了一个 gitlab 链接。
-
一个非常快速的建议:尝试在
mainContentController中的函数主体周围抛出$scope.$applyAsync(...)。也许如果它只需要一个摘要周期即可到达控制器,那应该可以解决它。 -
@UnicornMaster 如果你不知道有一个名为 Cloud9IDE 的在线 IDE(我认为这是最好的)......我目前在那里克隆它。我们可以在那里讨论并解决它。链接:ide.c9.io/amanuel2/gitclone。在那里打开协作选项卡。
标签: javascript angularjs angularjs-service angularjs-controlleras