我有一个方案,我有一个共享按钮,我有一个名为metaCtrl的容器控制器,它位于html标记上。
还有内部控制器。
我有一个共享按钮,单击后会调用model.share()函数。
码:
app.controller('metaCtrl', function($scope){
$scope.model = {};
$scope.model.share = function(){
$location.path('/share').search({'share' : '1'});
}
});
自我共享页面的控制器:
app.controller('shareCtrl', function($scope)){
$scope.layout.shareVisible = $location.path().share == 1 ? true : false;
$scope.model.share = function(){
$scope.layout.shareVisible = $scope.layout.shareVisible ? false : true;
var shareUrlValue = $scope.layout.shareVisible ? 1 : null;
$location.search('share', shareUrlValue);
}
});
想法是在整个应用程序中使用相同的HTML模式,但仅用于切换共享页面上的共享部分(如果用户已经在共享页面上),并且将用户发送到共享视图(如果用户当前不在那里)。
问题是,在我转到sahre页,然后返回到另一页后,函数share()在shareCtrl中引用了该函数,而不是metaCtrl。
最佳答案
我不确定这里是否有足够的信息,但我会试一试(我没有评论,因为我没有足够的代表)。请注意,您的shareCtrl并未创建新的模型对象,您只是分配了$ scope.model.share = func...。
该分配将覆盖父控制器中的功能,因为Angular会在作用域链中向上查找模型对象。
看到这个柱塞:
http://plnkr.co/edit/yv5rrpdlkniZdg94T4Lf
注意,在$ shareCtrl中用$ scope.model = {}注释掉了,两个字段的值都是“ shareCtrl”。但是,如果取消注释该行,则$ scope.model处于shareCtrl范围内,因此Angular不会沿范围链查找。