如何在同一个html文件中使用1个带2个名字的控制器?

时间:2017-07-20 07:45:35

标签: angularjs

我有控制器冲突。我有简单的表格

<form name='regForm' ng-controller="SingUpController as form">
  <input type="text" class="form-control"
               ng-model="form.user.lastName">
   <favorite-dish favor-dish='singUpController.favoriteDish'></favorite-
  </form>

和我的路由器

.state('public.signUp', {
      url: '/sing-up',
      templateUrl: 'src/public/sing-up/sing-up.html',
      controller: 'SingUpController',
      controllerAs: 'singUpController',
      resolve: {
        favDish: ['MenuService', function (MenuService) {
          return MenuService.getCategories();
        }]
      }
    });

如何将SingUpController用于名称:

  • form”来自“ng-controller =”SingUpController as form“”
  • singUpController”来自组件

2 个答案:

答案 0 :(得分:1)

您需要更改为

.state('public.signUp', {
      url: '/sing-up',
      templateUrl: 'src/public/sing-up/sing-up.html',
      controller: 'SingUpController',
      controllerAs: 'form',
      resolve: {
        favDish: ['MenuService', function (MenuService) {
          return MenuService.getCategories();
        }]
      }
    });

您的控制器必须是:

.controller("SingUpController",function(){
     var self= this;
     self.user = {};
});

你的html必须是:

<form name='regForm' ng-controller="SingUpController as form">
  <input type="text" class="form-control"
               ng-model="form.user.lastName">
   <favorite-dish favor-dish='form.favoriteDish'></favorite-
  </form>

答案 1 :(得分:0)

在同一个模板中为同一个控制器使用两个名称是没有意义的。

如果您的控制器中已经有user属性,则可以将其用作输入的模型:

<input type="text" ng-model="singUpController.user.lastName">

如果要访问控制器或模板其他位置的输入字段(例如,用于验证数据),则应将name="lastName"添加到输入标记。之后,您可以从控制器$scope.regForm.lastName或模板:regForm.lastName访问其值。

如果您不想使用$scope,那么只需在控制器中绑定一次:

`this.regForm = $scope.regForm`

然后使用this.regForm