5

我有一个场景,我有一个共享按钮,我有一个容器控制器,称为 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。

4

1 回答 1

2

我不确定这里是否有足够的信息,但我会试一试(我无法发表评论,因为我没有足够的代表)。请注意,您的 shareCtrl 没有创建新的模型对象,您只是分配 $scope.model.share = func...。

该分配覆盖了父控制器中的函数,因为 Angular 沿着作用域链向上查找模型对象。

看到这个 Plunker: http ://plnkr.co/edit/yv5rrpdlkniZdg94T4Lf

请注意,在 shareCtrl 中注释掉了 $scope.model = {},这两个字段的值都是“shareCtrl”。但是,如果您取消注释该行,则 $scope.model 在 shareCtrl 范围内,因此 Angular 不会沿着范围链查找。

于 2013-09-17T19:43:06.190 回答