在Angular App

时间:2015-10-07 22:45:10

标签: javascript angularjs angularjs-scope helper

我正在编写一个小型Angular应用程序,该应用程序依赖于在应用程序外部定义的一些常用功能来执行跨不同控制器的任务。在我的一个控制器中,在加载控制器时声明了scope对象。我希望能够稍后在我的一个辅助函数中分配它,但是赋值不起作用。

以下是相关代码:

.controller('myCtrl', function($scope, myFactory){

    $scope.myObj;

    $scope.saveEntry = function() {
        myFactory.saveEntry($scope.obj);
      formatSingleTableEntry($scope.obj, $scope.myObj);
      $scope.obj = {};
    }

  });

  // Entry Formatter
  function formatSingleTableEntry(entry, scopeObject) {
      if (typeof scopeObject === 'undefined') {
        scopeObject = [];
      }
      if (typeof entry.obsDt === 'string') {
          entry.obsDt = dateFormat(entry.obsDt);
      }
      scopeObject.push(entry);
    }

    // Date Formatter
    function dateFormat(date) {
      date = date.split('');
      date[10] = 'T';
      date = date.join('');
      return Date.parse(date);
    }

如果我将范围对象分配为控制器中的空数组,则一切正常,但在此配置中分配不起作用。我可以检查一下,在辅助函数中实际发生了这个赋值,但是当我在控制器中检查它时它没有。

为什么?

1 个答案:

答案 0 :(得分:1)

一个主要问题是未定义的$scope.myObj;是一个原语。当你将其作为参数传递给函数时,没有对原始变量的引用

var foo;

function test(myVar){
    myVar = 'Some string';
    //   myVar != foo
}

test(foo);
console.log(foo)// undefined

如果原始变量是一个数组或对象,则将 引用 传递给该数组或对象,从而可以对其进行操作。

简而言之,只需声明$scope.myObj =[];并且不要重新分配它并破坏任何创建的参考