Tag: angularjs scope

angularjs在控制器之间共享数据configuration

我想知道什么是控制器之间共享指令的好方法。 我有两个不同的configuration使用不同的控制器的指令,第一个想到我想使用像: //html <body data-ng-controller="MainCtrl"> <div class="container"> <div data-ui-view></div> </div> </body> //js .controller('MainCtrl', function ($scope,$upload) { /*File upload config*/ $scope.onFileSelect = function($files) { for (var i = 0; i < $files.length; i++) { var file = $files[i]; $scope.upload = $upload.upload({ url: 'server/upload/url', method: 'POST', data: {myObj: $scope.myModelObj}, file: file, }).progress(function(evt) { console.log('percent: ' + parseInt(100.0 […]

angular度范围函数执行多次

我已经在范围上定义了一个函数。 而当我从{{}}中的视图调用它时,它会执行X次。 调节器 function testCtrl($scope) { $scope.myFunc = function(name) { return "Hello " + name; } } HTML <div>{{myFunc('Joe')}}</div> 你可以在这个例子中看到它: http : //jsfiddle.net/rbRvD/2/ 或与Plunker: http ://plnkr.co/edit/LLQ7cKs2fEoBwv0C5XPE 我猜这是错误的,但为什么执行了这么多次呢?

AngularJS:当值大于时,ng-repeatfilter

我有一个简单的ng-repeat,它会抛出数据,它显示的一个字段是NumberOfStamps: <tr ng-repeat-start="list in Data.Items "> <td><a href=" {[{list.Title}]} {[{list.ForeName}]} {[{list.SurName}]}</a></td> <td>(Date of Birth {[{list.Dob}]})</td> <td>{[{list.NumberOfStamps}]} stamps</td> </tr> 示例输出: Mr Adam Happy Date of Birth 01/6/1984 16 stamps Mr Adam Sad Date of Birth 24/11/1975 0 stamps Mr Adam Green Date of Birth 02/1/1963 1 stamps Mr Adam Red Date of Birth 21/1/1951 12 stamps […]

angularJS:如何在父范围内调用子范围函数

如何从父范围调用子范围中定义的方法? function ParentCntl() { // I want to call the $scope.get here } function ChildCntl($scope) { $scope.get = function() { return "LOL"; } } http://jsfiddle.net/wUPdW/

当模型元素与模型数组拼接时,AngularJS:ng-repeat列表不会更新

我有两个控制器,并使用app.factory函数在它们之间共享数据。 第一个控制器在单击链接时在模型数组(pluginsDisplayed)中添加一个小部件。 该小部件被推入到数组中,这个变化反映到视图中(使用ng-repeat显示数组内容): <div ng-repeat="pluginD in pluginsDisplayed"> <div k2plugin pluginname="{{pluginD.name}}" pluginid="{{pluginD.id}}"></div> </div> 小部件是build立在三个指令,k2plugin,删除和resize。 remove指令为k2plugin指令的模板添加一个span。 当单击所述跨度时,使用Array.splice()删除共享数组中的正确元素。 共享数组已正确更新,但更改未反映在视图中。 但是,当添加另一个元素时,在删除之后,视图将被正确刷新,并且不会显示之前删除的元素。 我错了什么? 你能解释一下为什么这不起作用吗? 有没有更好的方法来做我想用AngularJS做什么? 这是我的index.html: <!doctype html> <html> <head> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.min.js"> </script> <script src="main.js"></script> </head> <body> <div ng-app="livePlugins"> <div ng-controller="pluginlistctrl"> <span>Add one of {{pluginList.length}} plugins</span> <li ng-repeat="plugin in pluginList"> <span><a href="" ng-click="add()">{{plugin.name}}</a></span> </li> </div> <div ng-controller="k2ctrl"> <div ng-repeat="pluginD in […]

为什么使用if(!$ scope。$$阶段)$ scope。$ apply()是一个反模式?

有时我需要使用$scope.$apply在我的代码中应用,有时会抛出一个“摘要已经在进行中”的错误。 所以我开始find一个解决这个问题的方法,并发现这个问题: AngularJS:当调用$ scope。$ apply()时,防止错误$ digest正在进行 。 然而在评论(和在维基上)你可以阅读: 不要做($ $ scope。$$阶段)$ scope。$ apply(),这意味着你的$ scope。$ apply()在调用栈中不够高。 所以现在我有两个问题: 为什么这是一个反模式? 我如何安全地使用$ scope。$ apply? 另一个“解决scheme”,以防止“摘要已经在进行中”的错误似乎是使用$超时: $timeout(function() { //… }); 这是要走的路吗? 更安全吗? 所以这里是一个真正的问题:我怎样才能完全消除“摘要已经在进行”错误的可能性? PS:我只使用$ scope。$ apply在非同步的非angularjscallback中。 (据我所知,这些情况下,你必须使用$ scope。$ apply,如果你想要更改被应用)

渲染$ sce.trustAsHtml中的指令

我在这里包括一个Plunker: http ://plnkr.co/edit/4vqV8toHo0vNjtfICtzI?p=preview 我想添加一个button到DOM,点击时应执行绑定到它的function。 在这种情况下,应该提醒“testing”。 这是代码。 调节器 app.controller('MainCtrl', function($scope, $sce) { $scope.trustedHtml = $sce.trustAsHtml('<button ng-click="testAlert()">Submit</button>'); $scope.testAlert = function () { alert('testing') }; }); HTML <body ng-controller="MainCtrl"> <div ng-bind-html="trustedHtml"></div> </body>

AngularJS:$ q – >事物的延期API顺序(生命周期)和谁调用摘要?

$ q服务在angularjs中非常强大,并且使asynchronous代码更轻松。 我是新angular度,但使用延期的API对我来说并不是很新鲜。 我必须说,我完全确定How to use文档的一部分+有非常有用的链接,在文档+我检出了源。 我的问题是更多关于延迟和承诺的API对象的angular度下的引擎盖部分。 它们生命周期中的确切阶段是什么?它们如何与rootScope.Scope (s)交互。 我的假设是,当承诺解决 – 它调用摘要循环? 是/否? 能否详细回答以下几个方面的具体问题: 每个描述的步骤/阶段发生的事情的顺序是什么? 当新的延迟对象与一个新的承诺实例创build – 谁知道它/是否重要? 承诺对象解决时,范围如何更新? 是否必须在callback中手动更新它,否则将自动调用摘要并更新rootScope, 如同在此处声明的那样 提及至less一种从promisecallback中更新范围的方法 我假设有很多其他有用的方面,随时提供他们。 我会欣赏并接受最详细的答案,尽可能多地引用文档或来源(我自己找不到)。 我找不到任何以前的讨论这个话题,如果已经有 – 请张贴链接。 ps:对任何一个有帮助的人都可以通过为这个问题build议一个更好的标题,请在评论中添加您的build议。 干杯!

指令在AngularJS中用ng-repeat范围隔离范围

我有一个隔离范围指令(这样我可以在其他地方重复使用指令),当我用ng-repeat使用这个指令时,它无法工作。 我已经阅读了关于这个主题的所有文档和堆栈溢出的答案,并理解了这些问题。 我相信我已经避免了所有常见的问题。 所以我明白我的代码失败,因为由ng-repeat指令创build的范围。 我自己的指令创build一个隔离作用域,并对父作用域中的对象执行双向数据绑定。 我的指令将为这个绑定variables赋值一个新的对象值,当我的指令没有使用ng-repeat (父variables被正确更新)时,这个工作就完美了。 但是,在ng-repeat ,赋值在ng-repeat范围内创build一个新variables,而父variables不会看到变化。 所有这一切,正如我所读的一样。 我也读过,当给定元素有多个指令时,只有一个作用域被创build。 并且可以在每个指令中设置priority来定义指令的应用顺序; 指令按优先级sorting,然后调用其编译函数(在http://docs.angularjs.org/guide/directive上search优先级字)。 所以我希望能够使用优先级来确保我的指令首先运行,最终创build一个隔离范围,而当ng-repeat运行时,它将重新使用隔离范围,而不是创build一个从原型inheritance的范围父范围。 ng-repeat文档指出该指令以优先级1000运行。 不清楚1是较高的优先级还是较低的优先级。 当我在我的指令中使用优先级1时,没有什么区别,所以我尝试了2000 。 但是,这使事情变得更糟:我的双向绑定变得undefined ,我的指令不显示任何东西。 我创造了一个小提琴来展示我的问题 。 我已经指出了我的指令中的priority设置。 我有一个名称对象的列表和一个名为name-row的指令,显示名称对象中的名字和姓氏字段。 当显示的名称被点击时,我想让它在主要范围内设置一个selectedvariables。 名称数组, selectedvariables使用双向数据绑定传递给name-row指令。 我知道如何通过调用主范围中的函数来实现这个function。 我也知道,如果selected是在另一个对象内,而我绑定到外部对象,事情会起作用。 但我目前对这些解决scheme不感兴趣。 相反,我所拥有的问题是: 如何防止ng-repeat创build从父范围原型inheritance的范围,而是使用我的指令的隔离范围? 为什么我的指令中的优先级为2000 ? 使用Batarang,是否有可能知道正在使用什么types的范围?

在AngularJS中观看模型更改时,如何忽略初始负载?

我有一个网页作为单个实体的编辑器,它在$ scope.fieldcontainer属性中是一个深层图。 在我的REST API(通过$ resource)获得响应之后,我将一个手表添加到“fieldcontainer”中。 我正在使用此手表来检测页面/实体是否“脏”。 现在我正在使保存button反弹,但我真的想让保存button隐藏,直到用户弄脏模型。 我得到的是手表的一个触发器,我认为这是因为.fieldcontainer = …赋值在我创build手表后立即发生。 我正在考虑使用“dirtyCount”属性来吸收最初的虚警,但这感觉非常黑客…我认为必须有一个“Angular idiomatic”方式来处理这个问题 – 我不是唯一使用手表来检测脏模型。 以下是我设置手表的代码: $scope.fieldcontainer = Message.get({id: $scope.entityId }, function(message,headers) { $scope.$watch('fieldcontainer', function() { console.log("model is dirty."); if ($scope.visibility.saveButton) { $('#saveMessageButtonRow').effect("bounce", { times:5, direction: 'right' }, 300); } }, true); }); 我只是一直认为有一个更清洁的方式来做这个比“if(dirtyCount> 0)”守护我的“UI污染”代码…