Javascript 从ui bootsrap重写函数

Javascript 从ui bootsrap重写函数,javascript,angularjs,Javascript,Angularjs,我已经在使用bower的应用程序中包含了angular bootstrap库 我目前正在使用一个(旧的)版本,其中包含一个bug,这个bug在新版本中得到了解决。但是,在我的情况下,尚不可能升级 我还想在我的index.html页面的导入行下方添加一个定制的修改过的js文件,但是编译错误发生了 我确切地知道库ui bootstrap.js的.js中包含bug的正确位置,但这些更改在该文件中并不合适,因为我在自动构建系统中开发的这些更改只会覆盖我的更改 因此,我想在调用有缺陷函数的地方(页面的控制

我已经在使用bower的应用程序中包含了angular bootstrap

我目前正在使用一个(旧的)版本,其中包含一个bug,这个bug在新版本中得到了解决。但是,在我的情况下,尚不可能升级

我还想在我的
index.html
页面的导入行下方添加一个定制的修改过的js文件,但是编译错误发生了

我确切地知道库
ui bootstrap.js
的.js中包含bug的正确位置,但这些更改在该文件中并不合适,因为我在自动构建系统中开发的这些更改只会覆盖我的更改

因此,我想在调用有缺陷函数的地方(页面的控制器或服务)覆盖函数


这可能吗?如果是这样,如何最好地覆盖它?

您可以为要更改的方法创建一个装饰器

假设您的工厂如下所示

app.factory('myService',function(){
  return {
    getData: function() {
      // your code
    }
  };
});
app.config(function($provide) {

  $provide.decorator('myService', function($delegate) {
    var oldFunc = $delegate.getData;
    $delegate.getData = function() {
      // your updated code
      return oldFunc();
    };

    return $delegate;
  });
});
现在,如果您想更改getData()函数的功能,可以按如下方式进行

app.factory('myService',function(){
  return {
    getData: function() {
      // your code
    }
  };
});
app.config(function($provide) {

  $provide.decorator('myService', function($delegate) {
    var oldFunc = $delegate.getData;
    $delegate.getData = function() {
      // your updated code
      return oldFunc();
    };

    return $delegate;
  });
});

您可以为要更改的方法创建装饰器

假设您的工厂如下所示

app.factory('myService',function(){
  return {
    getData: function() {
      // your code
    }
  };
});
app.config(function($provide) {

  $provide.decorator('myService', function($delegate) {
    var oldFunc = $delegate.getData;
    $delegate.getData = function() {
      // your updated code
      return oldFunc();
    };

    return $delegate;
  });
});
现在,如果您想更改getData()函数的功能,可以按如下方式进行

app.factory('myService',function(){
  return {
    getData: function() {
      // your code
    }
  };
});
app.config(function($provide) {

  $provide.decorator('myService', function($delegate) {
    var oldFunc = $delegate.getData;
    $delegate.getData = function() {
      // your updated code
      return oldFunc();
    };

    return $delegate;
  });
});

在github上分叉
angular引导
,进行所需的更改,并在
bower.json
中使用git url,如:

{
  "dependencies": {
    "angular-bootstrap": "git@github.com:yourgithubuser/angular-bootstrap.git"
  }
}

在github上分叉
angular引导
,进行所需的更改,并在
bower.json
中使用git url,如:

{
  "dependencies": {
    "angular-bootstrap": "git@github.com:yourgithubuser/angular-bootstrap.git"
  }
}

在这种情况下,破解自动化构建比破解代码要好way@Ahmad非常同意你的意见。这将在几周后发生,只是升级需要一个新版本的bootstrap,它需要一个新版本的angular,这迫使我改变了几乎整个网站。尽管这项工作计划在几周内完成,但目前我需要拿出一个“快速”解决方案。你会遇到什么样的编译错误?你为什么得到这个?你如何编译你的代码?通常覆盖它不是最好的方法。最快的方法是将有缺陷的指令复制到该指令的重命名自定义版本中,修复该缺陷并使其可供正常使用。唯一的问题是,您将代码绑定到库的特定版本,这意味着未来更改的灵活性较差。在这种情况下,黑客攻击您的自动化构建比黑客攻击您的代码要好way@Ahmad非常同意你的意见。这将在几周后发生,只是升级需要一个新版本的bootstrap,它需要一个新版本的angular,这迫使我改变了几乎整个网站。尽管这项工作计划在几周内完成,但目前我需要拿出一个“快速”解决方案。你会遇到什么样的编译错误?你为什么得到这个?你如何编译你的代码?通常覆盖它不是最好的方法。最快的方法是将有缺陷的指令复制到该指令的重命名自定义版本中,修复该缺陷并使其可供正常使用。唯一的问题是,您将代码绑定到库的特定版本,这意味着未来更改的灵活性很差。这个想法很好,但代码片段会比屏幕截图好得多。这个想法很好,但代码片段会比屏幕截图好得多。