2

我发现 Onsen UI 有一个问题:

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

2-我在 page1Ctrl 中定义了一个函数以转到 page-2.html :

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

执行page2Ctrl

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

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

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

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

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

谢谢

4

2 回答 2

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>

应用程序.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();        
    }
});
于 2014-04-25T03:07:20.017 回答
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();
  };
}
于 2014-04-24T19:05:24.587 回答