2013-06-28 241 views
0

的index.html角控制器和路由控制器

<body> 
    <div data-form-modal > 
     <form> 
      <input type='text' name='test'/> 
      <input type='submit' value='submit' ng-click='submit()'/> 
      //this submit() function is in mainCtrl 
     </form> 
    </div> 
</body> 

之间进行通信,这是我的行程:

app.config(function($routeProvider) { 
    $routeProvider 
     .when('/', { 
     controller: 'mainCtrl', 
     templateUrl: 'index.html' 
    }) 
     .otherwise({ 
     redirectTo: '/' 
    }); 
}); 

mainCtrl:

controller.mainCtrl = function(){ 
    ... 
    $scope.submit = function(){ 
     alert(1) 
    } 
} 

形式模态指令:

directive.formModal=function(){ 
    return { 
      ... 
    } 
} 

当我点击提交按钮时,我尝试调用mainCtrl中的submit()函数,但没有发现它,因为mainCtrl是一个路由控制器,并且不属于任何范围,并且formModal指令可以不能访问提交方法。

我想mainCtrl处理RE​​STful服务和formModal指令处理表单验证,但我不知道如何从formModal调用方法mainCtrl,什么是mainCtrl和formModalCtrl之间的关系?

编辑:

我尝试RESTful方法转移到服务,并调用formModal指令控制器的服务方法,它工作正常,但我仍然需要访问mainCtrl以更新模型,以便视图可以相应地改变。

+0

这是什么'controller'和'directive'对象?看起来像一个奇怪的方式来声明一个控制器和指令...尝试将你的控制器声明为'app.controller('mainCtrl',function(){...});'看看你是否可以点击? – callmekatootie

+0

我使用'var controller = {}; controller.mianCtrl = function(){}'并将其添加到应用程序模块'app.controller(控制器)' – paynestrike

+0

声明工作正常 – paynestrike

回答

1

我所做的是:

var app = angular.module('myApp', ['controllers']) 
    .config(['$routeProvider', function ($routeProvider) { 
    $routeProvider. 
     when('/', { 
     controller: 'mainCtrl', 
     templateUrl: 'index.html' 
     }). 
     otherwise({ 
     redirectTo: '/' 
     }); 
    }]); 

var controllers = angular.module('controllers', []); 

然后:

// separate file 
controllers.controller('mainCtrl', ['$scope' 
    function ($scope) { 
    // do stuff with $scope 
    } 
]); 

你也许可以做到app.controller('mainCtrl' ...代替,节省controllers变量。我只是碰巧让这个工作在我的网站上这样。

此外,请确保您有myAppng-app封闭与ng-view的元素(路由工作)。