你如何得到一个元素属性值? 例如HTML元素: <button data-id="345" ng-click="doStuff($element.target)">Button</button> JS: function doStuff(item){ angular.element(item)[0].data('id'); // undefined is not a function } 任何build议非常感谢,JSFIDDLE演示在这里: http : //jsfiddle.net/h3TFy/
这是我的问题的演示 。 $scope.myNumbers = [10, 20, 30]; <div ng-repeat="num in myNumbers"> <input type="text" ng-model="num"> <div>current scope: {{num}}</div> </div> 任何人都可以向我解释为什么input不可编辑/只读? 如果是devise,背后的理由是什么? 更新2/20/2014 看起来这不再是v1.2.0 + Demo的问题。 但请记住,尽pipe用户控件现在可以使用更新的angularJS版本进行编辑,但它是子范围中的num属性,而不是父范围,它被修改。 换句话说,修改用户控件中的值不会影响myNumbers数组。
使用定义控制器的原始方法 ,访问父级的范围相当简单,因为子级范围原型从其父级inheritance。 app.controller("parentCtrl", function($scope){ $scope.name = "Parent"; }) .controller("childCtrl", function($scope){ $scope.childName = "child of " + $scope.name; }); <div ng-controller="parentCtrl"> {{name}} <div ng-controller="childCtrl"> {{childName}} </div> </div> Controller-As方法似乎是声明控制器的推荐方式。 但是,对于Controller-As,上述方法不再有效。 当然,我可以通过View中的pc.name访问父范围: <div ng-controller="parentCtrl as pc"> {{pc.name}} <div ng-controller="childCtrl as cc"> {{cc.childName}} </div> </div> 我有这个问题(潜在的意大利面代码),但这个问题是关于从子控制器访问父范围。 我能看到这个工作的唯一方法是: app.controller("parentCtrl", function(){ this.name = "parent"; }) .controller("childCtrl", function($scope){ $scope.pc.name = "child of […]
我想通过使用scopevariables调用第一个控制器中的第二个控制器的方法。 这是我第一个控制器中的一个方法: $scope.initRestId = function(){ var catapp = document.getElementById('SecondApp'); var catscope = angular.element(catapp).scope(); catscope.rest_id = $scope.user.username; catscope.getMainCategories(); }; 我可以设置rest_id的值,但由于某种原因,我无法调用getMainCategories 。 控制台显示这个错误: TypeError:对象#没有方法“getMainCategories” 有没有办法调用上述方法? 编辑: 我使用以下方法同时加载两个应用程序; angular.bootstrap(document.getElementById('firstAppID'), ['firstApp']); angular.bootstrap(document.getElementById('secondAppID'), ['secondApp']); 我绝对可以在这里使用服务,但是我想知道是否还有其他的select可以做同样的事情!
我正在使用select来显示客户端名称。 用户应该能够select一个现有的客户端,然后更新范围属性: 调节器 初始化“首选”。 if($scope.clients.length > 0) $scope.existingClient = $scope.clients[0]; 视图 <select id='nm-existing-client-name' class='form-control input-lg' ng-model='existingClient' ng-options="client.name for client in clients"> </select> 范围属性existingClient在select菜单更改时不会更改。 如果未初始化值(上面的控制器行被删除),则existingClient的值将保持不确定状态。 附加一个ng-change会在一个值发生ng-change时触发,但是模型本身不会更新到新的值。 我正在使用AngularJS v1.2.0-rc.3 。
我一直在做一个更像框架的项目,并且有几个可以安装的应用程序/模块。 看到它像一个基本的appstore或google.play商店。 这是一个内联网应用程序,所有模块可以添加到您的使用帐户。 该框架已经在开发中,但是现在我正在围绕着应用程序/模块的想法。 ( 链接到开发中的概念certificate,可以在这里find ) 一个应用程序应该是有点独立的,不能突然从框架中包含脚本,这是完全可能的,通过在不同的模块中构build它们,如下所示: angular.module('myApp', []); 然而,一个应用程序可以有模板,脚本,CSS,它可以运行在一个单独的服务器上,所以我寻找最好的方式来获取脚本和CSS文件(S)并dynamic地加载到应用程序当用户从框架内启动app时。 目前我正在构build应用程序,就好像他们有一个主要的模板,例如www.framework.com/apps/myapp/views/app.html ,为了简单起见,我将脚本绑定到每个应用程序的一个脚本文件中,所以也有包括一个www.framework.com/apps/myapp/script.js 。 该框架包含一个加载应用程序的模板和一个appController 。 该模板包含这一块: <div data-ng-controller="AppController" data-ng-include="app.appTemplate"> <div>loading…</div> </div> 这基本上绑定到所有脚本加载后更新的$scope.app.appTemplate ,所以首先显示一个加载模板,稍后在页面中包含脚本后,它将app.appTemplate更新到上面提到的主模板应用。 当加载第一个索引模板的时候,这个模板当前是从框架中加载了AppController的,所以它使用框架的$scope而不是它自己的脚本。 我仍然必须以某种方式启动应用程序自己的angular度模块,并让它自己在没有在框架中运行任何东西“使其工作” 我仍然搞清楚如何最好地加载依赖的JavaScript文件(可能会使用requrejs或其他依赖加载程序),但我目前还不知道如何“启动”的应用程序,而不需要在框架的AppController 编辑 我创build了一个小型的演示项目来展示手头的问题, 在git-hub上可以看到完整的代码,这个项目做了一些硬编码的事情,当我得到概念是正确的,现在只需要在框架中加载应用程序。 如果可能的话,我可以考虑从哪里获取URL和应用程序名称…
目前正在开发一个项目,当我们没有将广播订阅从已销毁的范围中清除时,我们发现了巨大的内存泄漏。 下面的代码解决了这个问题: var onFooEventBroadcast = $rootScope.$on('fooEvent', doSomething); scope.$on('$destroy', function() { //remove the broadcast subscription when scope is destroyed onFooEventBroadcast(); }); 这种做法是否也适用于手表? 下面的代码示例: var onFooChanged = scope.$watch('foo', doSomething); scope.$on('$destroy', function() { //stop watching when scope is destroyed onFooChanged(); });
在我的一个angular控制员里面,我有这个: // controller A $rootScope.$on("myEventFire", function(event, reload) { someAction(); }); 在另一个控制器我有这个: // controller B $scope.openList = function(page) { $rootScope.$broadcast('myEventFire', 1); } 现在,这是一个单页的应用程序。 当我最初去控制器A并尝试触发这个事件时, someAction()将被执行一次。 如果我离开并再次回到控制器A并执行相同的操作, someAction()会执行两次。 如果我再做一次,会发生三次,依此类推。 我在这里做错了什么?
我现在正在阅读很多有关AngularJS的文章,并且遇到了这个神奇的$ watchfunction。 我知道如何使用它,但我不知道它是如何在后台实现的。 这是一个时间间隔函数吗? 或者是否angular度地称这个手表执行的每一个声明? 我现在不想深入了解源代码,如果你们中的一个人已经知道答案,并希望分享他对这个主题的知识,我会很高兴。 谢谢。
我想弄清楚为什么我的$watch没有被触发。 这是相关控制器的一个片段: $scope.$watch('tasks', function (newValue, oldValue) { //do some stuff //only enters here once //newValue and oldValue are equal at that point }); $scope.tasks = tasksService.tasks(); $scope.addTask = function (taskCreationString) { tasksService.addTask(taskCreationString);//modifies tasks array }; 在我看来, tasks显然是正确的更新,因为我有这样的长度: <span>There are {{tasks.length}} total tasks</span> 我错过了什么?