很少有基本问题困扰我与AngularJS有关

时间:2013-05-16 13:35:23

标签: angularjs

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

1 -

之间有什么区别
<div ng-controller="Page2Ctrl">

</div>

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

问这个是因为两者都工作正常。是否有必要在Html中定义ng-controller,即使在路由中定义了控制器?

2 -

之间有什么区别
function Page4Ctrl($scope){
    $scope.pageName = "Page 4 loaded."
}

并且

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

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

3 - 假设我正在为Customer开发CRUD应用程序。我创建了一个CustomerController.js文件,我想放置与Customer相关的所有方法(Create,Read,Update,Delete,FindById,FindAll等)。如下。这是正确的方法还是控制器应该是一个包含CRUD所有方法的CustomerController?

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

1 个答案:

答案 0 :(得分: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'})