1

我正在开发演示应用程序来学习 AngularJS。很少有事情困扰我。

1 -有什么区别

<div ng-controller="Page2Ctrl">

</div>

when('/page2', {templateUrl: 'views/flow1/page2.html', controller: 'Page2Ctrl'}).

问这个是因为任何一个都可以正常工作。ng-controller即使在Routes中定义了控制器,是否需要在Html中定义?

2 -有什么区别

function Page4Ctrl($scope){
    $scope.pageName = "Page 4 loaded."
}

app.controller('Page4Ctrl', function ($scope) {
    $scope.pageName = "Page 4 loaded."
});

第二个是冗长的,需要额外的输入。关于使用它们有什么建议吗?

3 -假设我正在为客户开发一个 CRUD 应用程序。我创建了一个 CustomerController.js 文件,我想在其中放置与客户相关的所有方法(创建、读取、更新、删除、FindById、FindAll 等)。如下所示。这是正确的方法还是控制器应该是一个包含所有 CRUD 方法的 CustomerController?

app.controller('CustomerCreateController', function ($scope) {});
app.controller('CustomerEditController', function ($scope) {});
app.controller('CustomerDeleteController', function ($scope) {});
4

1 回答 1

4

1)ng-controller直接向您的视图键入时,该视图与该控制器有直接联系。在路由中定义控制器允许您将视图重用于其他需求。

例如,您有一个显示名称列表的视图。

<ul ng-controller="ListCtrl">
   <li ng-repeat="item in items">{{item.name}}</li>
</ul>

现在,在您的应用程序的其他地方,您具有相同的结构,显示了您需要再次执行相同操作的名称列表。

<ul ng-controller="MyOtherListCtrl">
   <li ng-repeat="item in items">{{item.name}}</li>
</ul>

如果您删除该ng-controller属性,您可以重复使用它<ul/>

<ul>
   <li ng-repeat="item in items">{{item.name}}</li>
</ul>

.when('/list1', {templateUrl: 'list.html', controller: 'ListCtrl'})
.when('/list2', {templateUrl: 'list.html', controller: 'MyOtherListCtrl'})

2) app.controller将控制器范围限定为您的模块,而另一个在全局范围内创建控制器。

3)我取决于您的应用程序的结构,但只需创建一个具有$scope编辑、删除和创建方法的 CustomerController。该控制器可以依赖服务或$resoruce

app.controller('CustomerController', function ($scope, customerService) {
    $scope.add = function(customer){
       //add customer with customerService
    };
    $scope.edit = function(customer){
       //edit customer with customerService
    }
    $scope.delete = function(customer){
       //delete customer with customerService
    }
});

如果您想要单独的页面,您仍然可以重用相同的控制器。

.when('/add', {templateUrl: 'add.html', controller: 'CustomerController'})
.when('/edit', {templateUrl: 'edit.html', controller: 'CustomerController'})
.when('/delete', {templateUrl: 'delete.html', controller: 'CustomerController'})
于 2013-05-16T13:50:27.833 回答