Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
应该避免在AngularJS控制器中包含常规Javascript对象吗?_Javascript_Angularjs - Fatal编程技术网

应该避免在AngularJS控制器中包含常规Javascript对象吗?

应该避免在AngularJS控制器中包含常规Javascript对象吗?,javascript,angularjs,Javascript,Angularjs,我正在阅读亚当·弗里曼的《支持安古拉》一书,我对书中的一个例子提出了一个挑剔的问题: myApp.controller("tomorrowCtrl", function($scope) { var dayNames = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday";] $scope.day = dayNames[(new Date().getDay() + 1) % 7]

我正在阅读亚当·弗里曼的《支持安古拉》一书,我对书中的一个例子提出了一个挑剔的问题:

myApp.controller("tomorrowCtrl", function($scope) {
    var dayNames = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday";]
    $scope.day = dayNames[(new Date().getDay() + 1) % 7];    
});
我了解此控制器的总体用途:通过
$scope.day
在视图上显示一周中某一天的名称。但是我不明白为什么控制器使用普通的Javascript数组--
var dayNames
-来创建
$scope
对象

说明控制器用于:

设置$scope对象的初始状态[并]向$scope对象添加行为

果然,
dayNames
帮助设置$scope对象的初始状态。它还包含了一点应用程序的业务逻辑,所以我猜它在某种程度上是正确的。我担心的是,我还没有找到任何其他遵循这种设计模式的AngularJS控制器示例;我在Angular controller文档和PhoneCat教程中都没有找到任何内容

像这样在AngularJS控制器中包含普通Javascript对象有意义吗?(这被认为是无害的吗?)


若否,原因为何?有什么好的理由不在控制器中包含普通Javascript对象吗?另外,
dayNames
是否有不同的方式适合角度模式,比如指令或服务

你会在书籍和互联网上看到很多这样的例子。关键是,
$scope.day
被设置为某个值,我确信它在您的
视图中如何反映它

您可以使用外部纯Javascript逻辑并在angularJS中使用它,它显然不会破坏任何东西,但通常最好在服务/工厂/提供者的控制器之外完成所有范围操作/业务逻辑。为什么要反对angularJS并使用外部事物?你想坚持在angularJS的流程中

假设它在做更复杂的事情,它可能看起来更像这样:

myApp.factory("tomorrowService", function() {
    // factory's can be written in many different patterns
    // this is just for examples sake
    return {
        getDays : function () { /* return stuff */ }
    }
});

myApp.controller("tomorrowCtrl", function($scope, tomorrowService) {
    $scope.day = tomorrowService.getDays();    
});
使用
tomorrowService
中的方法执行所有业务逻辑并返回某种结果


我发现这篇文章()非常有助于更好地了解如何在angularJS项目中创建控制器和分离

你会在书籍和互联网上看到很多这样的例子。关键是,
$scope.day
被设置为某个值,我确信它在您的
视图中如何反映它

您可以使用外部纯Javascript逻辑并在angularJS中使用它,它显然不会破坏任何东西,但通常最好在服务/工厂/提供者的控制器之外完成所有范围操作/业务逻辑。为什么要反对angularJS并使用外部事物?你想坚持在angularJS的流程中

假设它在做更复杂的事情,它可能看起来更像这样:

myApp.factory("tomorrowService", function() {
    // factory's can be written in many different patterns
    // this is just for examples sake
    return {
        getDays : function () { /* return stuff */ }
    }
});

myApp.controller("tomorrowCtrl", function($scope, tomorrowService) {
    $scope.day = tomorrowService.getDays();    
});
使用
tomorrowService
中的方法执行所有业务逻辑并返回某种结果

我发现这篇文章()非常有助于更好地了解如何在angularJS项目中创建控制器和分离

  • 该数据是否只属于该控制器,而不属于其他控制器 应用程序
  • 这些数据是否直接支持视图模型的生成(与业务逻辑相反)
  • 这是否会创建一个“胖”控制器(即,使代码难以遵循)
  • (我不知道清单是否全面)

    如果答案是“不”,那么把它放在那里可能没问题

    并非所有内容都必须在$scope上。我有时会在问题中看到这一点:

    $scope.init = function(){
      // do some initialization
    }
    
    $scope.init();
    
    显然,没有理由将
    init
    附加到作用域上,最好声明为控制器中定义的命名函数:

    function init(){
    }
    
    init();
    
  • 该数据是否只属于该控制器,而不属于其他控制器 应用程序
  • 这些数据是否直接支持视图模型的生成(与业务逻辑相反)
  • 这是否会创建一个“胖”控制器(即,使代码难以遵循)
  • (我不知道清单是否全面)

    如果答案是“不”,那么把它放在那里可能没问题

    并非所有内容都必须在$scope上。我有时会在问题中看到这一点:

    $scope.init = function(){
      // do some initialization
    }
    
    $scope.init();
    
    显然,没有理由将
    init
    附加到作用域上,最好声明为控制器中定义的命名函数:

    function init(){
    }
    
    init();
    

    我猜他们没有理由公开日名,所以他们没有把它绑定到$scope?我猜他们没有理由公开日名,所以他们没有把它绑定到$scope?而且吹毛求疵的是,它应该正确地命名为
    tomorrowService
    -工厂只是生成服务实例的函数:)我输入得太快了。你赢了:)修复了@NewDevAnd和挑剔,它应该正确命名为
    tomorrowService
    -工厂只是生成服务实例的函数:)我输入得太快了。你赢了:)修正了@NewDev