加载视图时运行 AngularJS 初始化代码

2024-03-22

当我加载视图时,我想在其关联的控制器中运行一些初始化代码。

为此,我在视图的主要元素上使用了 ng-init 指令:

<div ng-init="init()">
  blah
</div>

并在控制器中:

$scope.init = function () {
    if ($routeParams.Id) {
        //get an existing object
        });
    } else {
       //create a new object
    }

    $scope.isSaving = false;
}

第一个问题:这是正确的做法吗?

接下来,我对事件发生的顺序有疑问。在视图中我有一个“保存”按钮,它使用ng-disabled指令如下:

<button ng-click="save()" ng-disabled="isClean()">Save</button>

the isClean()控制器中定义了函数:

$scope.isClean = function () {
    return $scope.hasChanges() && !$scope.isSaving;
}

正如你所看到的,它使用$scope.isSaving标志,它是在init()功能。

问题:加载视图时,调用 isClean 函数before the init()函数,因此标志isSaving is undefined。我可以做什么来防止这种情况发生?


当您的视图加载时,其关联的控制器也会加载。而不是使用ng-init,只需致电您的init()控制器中的方法:

$scope.init = function () {
    if ($routeParams.Id) {
        //get an existing object
    } else {
        //create a new object
    }
    $scope.isSaving = false;
}
...
$scope.init();

由于您的控制器之前运行过ng-init,这也解决了你的第二个问题。

Fiddle http://jsfiddle.net/mrajcok/wBM64/


As John David Five提到过,您可能不想将其附加到$scope为了使这个方法私有。

var init = function () {
    // do something
}
...
init();

参见 jsFiddle http://jsfiddle.net/AdrienBe/52yc52m6/


如果您想等待预设某些数据,请将该数据请求移至解析,或将观察器添加到该集合或对象,并在数据满足初始化条件时调用您的 init 方法。一旦满足我的数据要求,我通常会删除观察程序,因此如果您观察的数据发生变化并满足运行 init 方法的标准,则 init 函数不会随机重新运行。

var init = function () {
    // do something
}
...
var unwatch = scope.$watch('myCollecitonOrObject', function(newVal, oldVal){
                    if( newVal && newVal.length > 0) {
                        unwatch();
                        init();
                    }
                });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

加载视图时运行 AngularJS 初始化代码 的相关文章

随机推荐

  • 控制线段

    这是一个简单的问题 我一直在成功使用 d3 svg line 生成器 但我现在需要能够对整条线中的每个单独段进行更多控制 例如 每个部分可能需要不同的颜色 或者每个片段甚至可能需要不同的厚度 根据相邻片段的厚度逐渐变细或变细 我想知道实现这
  • TFS 中的搁置是什么?

    在 TFS 中搁置仅仅是一种软签入 以便其他团队成员可以看到源代码吗 即搁置的代码不会被编译 对吗 货架有很多用途 主要有 上下文切换 保存当前任务的工作 以便您可以切换到另一个高优先级任务 假设您正在开发一项新功能 只顾自己的事 这时您的
  • 什么是 := 运算符?

    在某些编程语言中 我看到 例如 x y 这是什么 运算符通常被称为 它有什么作用 在所有支持运算符的语言中 这意味着分配 在支持运算符的语言中 the 运算符通常表示相等比较 在语言中 意味着赋值 通常用于相等比较 does mean 我不
  • javascript:动态更改名称属性

    我正在处理这个脚本 它没有错误 但我想在上面添加一些功能 就像当我单击它添加的按钮时一样 但我希望输入文本的名称属性也被更改 这是我的脚本 javascript var a 1 function add var fContent docum
  • 有没有办法使用 Selenium Webdriver (firefox) 记录 http 请求/响应?

    有没有办法使用 Selenium Webdriver firefox 记录 http 请求 响应 我想可以通过代理驱动网络流量并记录它 但也许有更简单的 内部 硒解决方案 在 selenium 频道上问了这个问题 您将需要代理它来捕获请求
  • Android Intent:发送带有附件的电子邮件

    我想通过电子邮件发送多个文件 我找到了这个Android 使用 Intent 实现多个电子邮件附件 https stackoverflow com questions 2264622 android multiple email attac
  • 打印从根节点到叶节点的所有路径 - javascript

    function formCategoryTrees object each object function objectValues var leafCategoryId objectValues id var leafCategoryN
  • 什么是SOA(面向服务的架构)?

    如果你愿意的话 可以叫我巨魔 但我是认真的 新的 SOA 趋势与我 15 年前构建的客户端服务架构究竟有何不同 我一直听到 SOA 但我不明白它与我们一直以来所做的有什么不同 早在 10 年前 我的公司就有多个客户 使用多种语言 使用相同的
  • Visual Studio 中的递归

    当我运行这个非常简单的递归代码时 我发现当函数 recursCheck 使用整数参数时 我的内存在 Win32 模式下跳到 200 MB 在 x64 模式下跳到 45 MB 并且当参数的类型为 short Win32 模式使用的内存为 4
  • cx_Oracle - DLL 加载失败

    我在使用 Python 导入 cx Oracle 时遇到问题 我知道这里已经讨论了 cx Oracle 的很多问题 但在阅读所有相关主题后 我似乎找不到解决我的问题的方法 我有两台机器 一台是我的计算机 另一台是远程工作站 它们具有相似的配
  • SQLDependency -- 无效的 SQL

    我能看出的最好的here http msdn microsoft com en us library ms181122 28SQL 105 29 aspx 我没有违反此查询的任何规则 但更改事件不断触发 状态无效 SELECT COUNT
  • 如何在测试期间在 Helper 中存根函数

    看看这个辅助函数 def show welcome banner controller name competition action name index controller name submissions action name s
  • 如何使用blueimp jquery上传插件获取每个块的md5迭代md5和

    我需要计算迭代的 md5 哈希值并将其发送到我的 upload api 但我不知道怎么办 我正在使用这里找到的教程 http tutorialzine com 2013 05 mini ajax file upload form http
  • 如何排除 Maven 继承的子依赖项中的父 pom 依赖项?

    我在父 pom 中有一个版本为 2 3 的 Jackson 在我的子 pom 中我需要版本 2 9 有什么方法可以排除父 pom 依赖项吗 您可以使用 dependencyManagement 部分覆盖依赖项的版本
  • 如何将一个独立的窗口定位在屏幕上的精确位置?

    我实际上正在开发一个相对复杂的 GTK 2 应用程序 我的应用程序显然有一个主窗口 然后我需要打开一个新的 独立 窗口 我需要将 飞行 窗口放在 中precise屏幕的准确位置 在顶点 of a widget 绘图区域 我需要将新窗口放置在
  • React-Native-Web 错误:rnw_blogpost.bundle.js:1414 Uncaught TypeError: 无法读取未定义的属性(读取“isBatchingLegacy”)

    Adding react native web打包到现有的 RN 应用程序 使用react native init 按照此站点的设置进行操作 https arry medium com how to add react native web
  • 如何使用组成 Gluon 项目的 iOS、android、桌面(和主)的 Gluon 文件夹?

    我正在尝试通过将特定于平台 操作系统的代码放入各自的文件夹中来设置我的 Gluon 项目 在新创建的 Gluon 项目中设置的自动创建的项目 然而 无论我用 Gradle 执行什么任务 它最终都会采取什么Main folder 可以说我想要
  • 如何找到使用 cv.fitEllipse(contour) 获得的椭圆的面积?

    我通过使用获得椭圆ellipse cv2 fitEllipse cnt 它返回一个包含 3 个元素的元组 但我无法找到其中所描述的内容 我想求出所获得的椭圆的面积 我该怎么做 Thanks fitEllipse返回一个由三个元素组成的元组
  • Objective-C 中的长轮询

    我有一个使用 API 来获取网站实时更新的应用程序 他们使用他们所谓的长轮询技术 http en wikipedia org wiki Push technology Long polling 长轮询是一种变体 传统的投票技术和 允许模拟信
  • 加载视图时运行 AngularJS 初始化代码

    当我加载视图时 我想在其关联的控制器中运行一些初始化代码 为此 我在视图的主要元素上使用了 ng init 指令 div blah div 并在控制器中 scope init function if routeParams Id get a