对于局部视图,我想做一些我通常会使用的JavaScript东西$(document).ready(function() {...})
,例如将venet侦听器绑定到元素。我知道这不适用于AngularJS和部分视图加载到“根”视图。
因此,我向监听$viewContentLoaded
事件的控制器添加了一个监听器。侦听器的函数被调用,因此触发了该事件,但是在我看来,它似乎是在呈现部分视图之前。在侦听器的函数中设置断点并使用firebug对其进行调试时,我都看不到元素,在函数中的jquery选择也找不到局部视图的元素。
这是控制器的外观:
angular.module('docinvoiceClientAngularjsApp')
.controller('LoginController', function ($scope, $rootScope) {
$scope.$on('$viewContentLoaded', function(event) {
console.log("content loaded");
console.log($("#loginForm")); // breakpoint here
});
[...]
我想我做错了,因为如果这是一个常见的错误,则必须在stackoverflow上发布更多帖子。
当我使用 ui-router 和 ui-view时 ,我将为您提供路由文件的摘录:
angular
.module('docinvoiceClientAngularjsApp', [
'ui.router',
'ngAnimate',
'ngCookies',
'ngResource',
'ngMessages',
'ngRoute',
'ngSanitize',
'ngTouch'
])
.config(function ($routeProvider, $stateProvider) {
$stateProvider
.state('login', {
url: '/',
templateUrl: 'components/login/loginView.html',
controller: 'LoginController'
})
.run(['$state', function ($state) {
$state.transitionTo('login');
}])
[...]
任何帮助表示赞赏。谢谢和亲切的问候
更新1: 我将错误归结为以下用例:loginView.html如下所示:
<div id="loginContainer" style="width: 300px">
<form id="loginForm" ng-submit="login(credentials)" ng-if="session.token == undefined">
[...]
一旦ng-if
从div标签中删除,它就会按预期工作。呈现DOM后触发事件,因此jQuery找到了元素。如果将ng- if
d附加到div标记,则行为将首先描述。
更新2: 如我所愿,我添加了一个工作演示,该演示显示了添加ng- if
指令时的不同行为。谁能为我指出正确的方向?不要像这样使用登录表单,因为还有更多用例,在这些用例中,我想基于某种表达式删除视图的某些部分,并在部分视图准备好后做一些JavaScript事情。
您可以在此处找到有效的演示:演示
这与角度摘要循环有关,与角度如何在引擎盖下工作,数据绑定等有关。有很多很棒的教程对此进行了解释。
要解决您的问题,请使用$ timeout,它将使代码在下一个周期执行(如果已解析ng-if):
app.controller('LoginController', function ($scope, $timeout) {
$scope.$on('$viewContentLoaded', function(event) {
$timeout(function() {
$scope.formData.value = document.getElementById("loginForm").id;
},0);
});
});
在此处修复了演示:http :
//codepen.io/anon/pen/JoYPdv
问题内容: 对我的应用程序使用的各种视图使用单独的样式表的正确/可接受的方法是什么? 目前,我在视图/部分的html顶部放置了一个link元素,但有人告诉我这是一种不好的做法,即使所有现代浏览器都支持它,但我可以理解为什么对此不满意。 另一种可能性是将单独的样式表放在我的index.html中,但是我希望它仅在以性能名义加载其视图时才加载样式表。 这是不好的做法吗,因为样式只有在将css从服务器加
我有一个jdbc客户机与postgresql数据库通信。从JDBC中创建一条准备好的语句,用于在表中插入一些数据,但在创建查询时,客户机不知道要在语句中插入的所有字段,为了完成查询,我编写了一个触发器,在该表上插入之前触发,找到缺少的值,继续执行查询。这是jdbc代码: 这是触发代码: 当触发器触发时,我有一个错误: 这是什么意思?记录新的,正如你在jdbc代码中看到的那样。。。
问题内容: 嗨,我想知道在使用angularjs上传图像之前是否可以预览图像?我正在使用这个图书馆。https://github.com/danialfarid/angular- file-upload 谢谢。这是我的代码: template.html controller.js 问题答案: OdeToCode为这个东西发布了很棒的服务。因此,通过此简单的指令,您可以轻松预览甚至查看进度栏: 它适
我正在使用ng-view来包含AngularJS部分视图,并且我想基于包含的视图更新页面标题和h1头标签。但是,这些都超出了部分视图控制器的范围,所以我无法确定如何将它们绑定到控制器中的数据集。 如果是ASP.NET MVC,您可以使用@ViewBag来完成此操作,但我不知道AngularJS中的等同功能。我已经搜索了共享服务,事件等,但仍然不能使它工作。任何方法来修改我的例子,以便它的工作将是非
问题内容: 我在应用程序中使用JavaFX Webview。使用以下代码,我在页面加载后设置了一个成员 现在在javascript中,mymember.doSomething()当我按下按钮并成功执行时,我可以调用例如被调用,但是如果我将以下代码添加到html中, 页面加载后不会自动执行。好像window.onload在LoadWorker被通知之前就已执行。因此mymember尚未设置。但是
也许有人能帮我澄清一下。 我正在尝试编写一个插入前触发器,如果它留空,可以设置关闭。这可能吗? 没有太多代码可显示。我所做的只是创建了一个带有调试语句的简单的插入前触发器,以确保我的触发器在验证规则之前执行。似乎验证规则是第一位的(我显然无法更改它)。触发器永远不会触发。 这是可行的还是不可能的?