【问题标题】:Assign Scope Objects Outside of Angular App在 Angular 应用程序之外分配范围对象
【发布时间】:2015-10-07 22:45:10
【问题描述】:

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

以下是相关代码:

.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);
    }

如果我在控制器中将作用域对象分配为空数组,一切正常,但在此配置中没有分配。我可以检查该分配是否实际发生在辅助函数中,但是当我签入控制器时它没有。

为什么?

【问题讨论】:

  • 代码当前运行的方式是保存的第一个条目将导致辅助函数将 scopeObject 变量分配为数组,然后推送条目。我可以检查一下,它工作正常,然后当我回到控制器时,即使在分配和推送之后,scopeObject 仍然未定义。
  • 更详细地解释come back....每次使用都是一个新实例。如果需要会话持久化数据需要存储在服务中
  • 只是在做console.logs,在代码的不同点检查对象的类型。回来了。
  • 为什么不把这些功能移到控制器里面呢?或者提供执行这些任务的服务?我还想知道您是否需要使用$timeout()$scope.$evalAsync() 来启动您所做的更新的摘要过程。

标签: javascript angularjs angularjs-scope helper


【解决方案1】:

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

var foo;

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

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

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

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

【讨论】:

  • 我想避免返回数组,每次添加条目时重新分配感觉是多余的,但基本上这将是使用此辅助函数的唯一方法?还是控制器内的分配?
  • 只需将其设为空数组即可,不要通过重新分配来破坏引用
  • 对,我很着迷。我正在使用 ng-show 隐藏该数组将填充的表,直到数组中有数据为止。空数组是真实的,所以表格显示,这就是为什么我想推迟分配到以后。我可以使用 myObj[0] 隐藏表格,直到有实际条目,但就像我说的那样,我很着迷。我可能会那样做...谢谢!
猜你喜欢
  • 2015-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多