如何在ons.navigator.popPage()之后执行附加到上一页的控制器中定义的函数?

时间:2014-04-24 15:45:35

标签: angularjs angularjs-scope onsen-ui

我发现了Onsen UI,我遇到了一个问题:

1-我定义了2页page-1.htmlpage-2.html并附加了控制器(page1Ctrlpage2Ctrl)。

2-我在page1Ctrl中定义了一个函数,转到第2.html页:

$scope.ons.navigator.pushPage('page-2.html');

执行page2Ctrl

3-在此页面中,我有一个按钮,用于执行在page-1.htmlpopPage())上返回的代码。此功能附加到page2Ctrl

function page2Ctrl($scope) {
    $scope.functionToPopPage = function() {

        // >>> Here I would like to execute a function attached to page1Ctrl

        $scope.ons.navigator.popPage();
    };
}

4-然后,我想启动page1Ctrl中定义的函数,我该如何处理?

由于

2 个答案:

答案 0 :(得分:3)

您可以与服务共享控制器的功能。尝试将要连接的功能注册到page1Ctrl和page2Ctrl,然后从page2Ctrl调用共享功能。以下代码就是一个例子。

page1.html

<ons-page class="center" ng-controller="page1Ctrl">
  <ons-navigator-toolbar
    title="Welcome">        
  </ons-navigator-toolbar>
  <h1>Page 1</h1>
  <ons-button ng-click="goToPage2()">Push Page 2</ons-sbutton>  
</ons-page>

page2.html

<ons-page class="center" ng-controller="page2Ctrl">
  <ons-navigator-toolbar title="Page 2">        
  </ons-navigator-toolbar>
  <h1>Page 2</h1>
  <button class="topcoat-button" ng-click="popToPage1()">Pop Page1</button>
</ons-page>

app.js

var myApp = angular.module('myApp', ['onsen.directives']);


myApp.factory('pageService', function(){
    return{
        foo : function()
            alert('foo');
        }
    }        
});

myApp.controller('page1Ctrl', function($scope, pageService){    
    $scope.goToPage2 = function(){
        pageService.foo();
        $scope.ons.navigator.pushPage("page2.html");        
    }
});

myApp.controller('page2Ctrl', function($scope, pageService){    
    $scope.popToPage1 = function(){
        pageService.foo();
        $scope.ons.navigator.popPage();        
    }
});

答案 1 :(得分:0)

想法:

  • 您声明了一个全局变量
  • 在控制器中,page1Ctrl将您的功能分配给此变量
  • 你在page2Ctrl中使用过:)

前:

var heloWord;

function page1Ctrl($scope) {
  heloWord = function() {
    console.log('Helo Word');
  }
}

function page2Ctrl($scope) {
  $scope.functionToPopPage = function() {
    heloWord();
    $scope.ons.navigator.popPage();
  };
}