相关疑难解决方法(0)

如何取消订阅angularJS中的广播事件.如何删除通过$ on注册的功能

我已经使用$ on函数将我的监听器注册到$ broadcast事件

$scope.$on("onViewUpdated", this.callMe);
Run Code Online (Sandbox Code Playgroud)

我想根据特定的业务规则取消注册此侦听器.但我的问题是,一旦注册,我无法取消注册.

AngularJS中是否有任何方法可以取消注册特定的侦听器?像$ on这样取消注册此事件的方法可能是$ off.所以我可以说基于业务逻辑

 $scope.$off("onViewUpdated", this.callMe);
Run Code Online (Sandbox Code Playgroud)

当有人播放"onViewUpdated"事件时,此函数停止被调用.

谢谢

编辑:我想从另一个函数取消注册监听器.不是我注册它的功能.

angularjs

273
推荐指数
5
解决办法
11万
查看次数

AngularJS - $ destroy是否删除事件监听器?

https://docs.angularjs.org/guide/directive

通过侦听此事件,您可以删除可能导致内存泄漏的事件侦听器.注册到范围和元素的监听器在销毁时会自动清理,但如果您在服务上注册了监听器,或者在未删除的DOM节点上注册了监听器,则必须自行清理或者你冒着引入内存泄漏的风险.

最佳实践:指令应该自行清理.您可以使用element.on('$ destroy',...)或范围.$ on('$ destroy',...)来删除指令时运行清理函数.

题:

element.on "click", (event) ->我的指令里面有一个:

  1. 当指令被销毁时,是否有任何内存引用element.on以防止它被垃圾收集?
  2. Angular文档声明我应该使用处理程序来删除$destroy发出的事件上的事件侦听器.我的印象是destroy()删除了事件监听器,是不是这样?

memory-leaks angularjs

197
推荐指数
1
解决办法
11万
查看次数

angular.js $ destroy事件 - 我应该手动取消绑定吗?

我试图弄清楚角度基数是否会自动解除观察者和范围事件的约束,$scope.$on(...)或者$scope.$watch(...)当范围被破坏时

假设我有以下代码:

$scope.$on('someEvents', handleSomeEvent);
$scope.$watch('someProperty', handleSomePropertyChange);
Run Code Online (Sandbox Code Playgroud)

在范围内触发$ destroy事件时,是否需要手动取消绑定这些观察者和事件?

javascript angularjs angularjs-scope

35
推荐指数
3
解决办法
2万
查看次数

如何从工厂发出事件

如何从工厂或服务中发出事件.我无法将$ scope注入工厂,因此无法发出事件.

我收到以下错误 - Unknown provider: $scopeProvider <- $scope

谢谢,穆尔塔扎

angularjs

31
推荐指数
2
解决办法
4万
查看次数

AngularJS中模块之间的通信

我想可以在一个shellpage中将许多角度模块连接到不同的区域.但是AngularJS中的模块可以"互相交谈"吗?如果有,怎么样?

angularjs

27
推荐指数
1
解决办法
2万
查看次数

所有浏览器的Object.defineProperty?

询问Object.defineProperty,如下所示:

function testComponent(){
    var testProperty;
    Object.defineProperty(this, "testProperty",
    {
        get : function()
        {
           return testProperty;
        },
        set : function(val)
        {
          testProperty = val;
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

它会像这样使用的地方:

testObject = new testComponent();
testObject.testProperty = "testValue";
Run Code Online (Sandbox Code Playgroud)

基于我到目前为止看到的,看起来没有跨浏览器解决方案,因为我尝试使用es5-shim没有运气,但我想证实.我也发现了对这篇文章的引用,我的测试在IE 7和8中仍然失败,任何人都可以对此有所了解吗?

我记得几个月前在S/O的某个地方查看了一个相关的问题,我想我看到有人在答案中为此写了一个解决方案.任何关于getter/setter的一般解决方法也将受到赞赏.我的想法是,我需要在对象上使用一些等效的getter setter而不通过方法传递参数更改.我不需要IE6,但我想支持IE7 + ff 3.6+等范围内的浏览器


下面的QUnit测试:(jsFiddles)

(这些在我的机器上的所有浏览器中传递,除了IE 7和8

直接使用defineProperty,没有垫片:http:
//jsfiddle.net/uSYFE/

使用ES5垫片小提琴,我假设我需要做的就是包括它? :http:
//jsfiddle.net/hyperthalamus/ntwDy/

使用IE推荐的解决方案小提琴:http:
//jsfiddle.net/hyperthalamus/xfvz3/

javascript getter-setter defineproperty

20
推荐指数
1
解决办法
1万
查看次数

AngularJS与SignalR

我正在玩Angular和SignalR,我曾尝试创建一个充当经理的服务.

dashboard.factory('notificationsHub', function ($scope) {
  var connection;
  var proxy;

  var initialize = function () {
    connection = $.hubConnection();
    proxy = connection.createHubProxy('notification');

    proxy.on('numberOfIncidents', function (numOfIncident) {
      console.log(numOfIncident);
      $scope.$emit('numberOfIncidents', numOfIncident);
    });

    connection.start()
      .done(function() {
        console.log('Connected');
      })
     .fail(function() { console.log('Failed to connect Connected'); });
  };

  return {
    initialize: initialize
  };
});
Run Code Online (Sandbox Code Playgroud)

但是我得到了错误Error: Unknown provider: $scopeProvider <- $scope <- notificationsHub.

如何使用pubsub将所有通知传递给控制器​​?也许jQuery?

signalr angularjs

13
推荐指数
1
解决办法
2万
查看次数

使用控制器初始化角度服务的正确方法

我来自一个静态类型的面向对象背景(C#),一般来说是Angular和Javascript的新手.我正在尝试使用Angular和JQueryMobile构建一个应用程序,并且面临的情况是服务不像单例一样 - 即使它们已经在一个控制器中初始化一次,服务中的属性也不会存储它们所属的任何状态设置为传递到另一个控制器或服务时.此外,当我尝试调试下面描述的代码时,我遇到了一些意外的行为:

我的设置:

  • 我正在使用JQueryMobile单页模板,该页面模板将应用程序的所有页面作为div放在同一个html页面上,并使用"href ="#DivName"模式进行重定向
  • 应用程序的每个div(页面)都有一个关联的控制器和服务
  • 控制器根据需要注入多个服务,并且注入的服务应保持在其他控制器中初始化的状态.
  • 我没有使用路由和模板 - 整个html在一个页面中

相关代码大纲如下:

HTML:

<div data-role="page" id="PageA" data-ng-controller="PageAController">      

<!-- page content and UI elements-->    

</div>


<div data-role="page" id="PageB" data-ng-controller="PageBController">

<!-- page content and UI elements-->    

</div>
Run Code Online (Sandbox Code Playgroud)

服务:

var App = angular.module('App', []);

App.service('serviceA', function () {

    var propA;

    //objectX is an array of objects with each object containing a hashtable and some other properties 

    propA = [{},{}];  //hardcoded value for objectX gets returned properly

    return {

        initialize: function(objectX){          

            propA = objectX; …
Run Code Online (Sandbox Code Playgroud)

javascript jquery-mobile angularjs

6
推荐指数
1
解决办法
1万
查看次数

如何将结果从angular-ui-bootstrap的模态传递给父而不关闭?

根据https://angular-ui.github.io/bootstrap/#/modal,我想将modal的结果传递给父节点而不关闭,但在示例代码中,它们只显示通过关闭传递给父节点的结果

$uibModalInstance.close($scope.selected.item);
Run Code Online (Sandbox Code Playgroud)

我想在点击项目时将数据传递给父项,但我不知道这样做.我真的需要帮助.谢谢.

angularjs angular-ui-bootstrap

5
推荐指数
1
解决办法
1556
查看次数

Angular UI - UI-Router - 在子ui-view上传递数据和调用函数

使用Angular JS - UI路由器,我需要从父视图project.details到我的子视图进行通信project.details.tasks.我的孩子如何查看访问父视图的范围?另外我希望我的父视图能够在我的子视图上调用函数?我怎样才能做到这一点?

这是我想要做的一个粗略的例子:

.state('project.details', {
        url: "/:id",
        template: '<a ng-click="[target-route??]>childFunction()">',
        controller: function($scope){
            $scope.parentString = "parent value";
        }
    })
.state('project.details.tasks', {
        url: "/tasks",
        templateUrl: "project.details.tasks.html",
        controller: function($scope){
           console.log("how do I get" + $scope.parentString + " here?";

           $scope.childFunction = function() { console.log('Parent calling');


        }
    })
Run Code Online (Sandbox Code Playgroud)

angularjs angular-ui-router

2
推荐指数
1
解决办法
1万
查看次数

AngularJs - why is $emit not working from my popup window

I'm using the bootstrap popup modal window, and trying to $emit and event but for some reason the main page is not detecting the event. It's a pretty simple setup, but I can't figure out why. From what I can tell when viewing Batarang it appears the popup is a child scope of the main app scope so I thought it would work but it doesn't. In this simple app when you press 'ok' in the popup window it should …

emit angularjs

2
推荐指数
1
解决办法
4479
查看次数