当前位置: 首页 > 面试题库 >

如何将数据从第三方库回调(firebase)传递到AngularJS中的View

严扬
2023-03-14
问题内容

我正在使用angularjs和firebase上载文件,我正在尝试从控制器传递参数以在state_changed事件内查看。它不起作用,我可以在控制器上打印它,但不能在视图中使用它

这些我用过的代码

// File or Blob named mountains.jpg

var file = "";



// Create the file metadata

var metadata = {

  contentType: 'image/jpeg'

};



// Upload file and metadata to the object 'images/mountains.jpg'

var uploadTask = storageRef.child('images/' + file.name).put(file, metadata);



// Listen for state changes, errors, and completion of the upload.

uploadTask.on(firebase.storage.TaskEvent.STATE_CHANGED, // or 'state_changed'

  function(snapshot) {

    // Get task progress, including the number of bytes uploaded and the total number of bytes to be uploaded

    var progress = (snapshot.bytesTransferred / snapshot.totalBytes) * 100;

    console.log('Upload is ' + progress + '% done');

    $scope.progress = progress;

    switch (snapshot.state) {

      case firebase.storage.TaskState.PAUSED: // or 'paused'

        console.log('Upload is paused');

        break;

      case firebase.storage.TaskState.RUNNING: // or 'running'

        console.log('Upload is running');

        break;

    }

  }, function(error) {

  switch (error.code) {

    case 'storage/unauthorized':

      // User doesn't have permission to access the object

      break;



    case 'storage/canceled':

      // User canceled the upload

      break;



    ...



    case 'storage/unknown':

      // Unknown error occurred, inspect error.serverResponse

      break;

  }

}, function() {

  // Upload completed successfully, now we can get the download URL

  var downloadURL = uploadTask.snapshot.downloadURL;

});


<pre>{{progress}}</pre>

问题答案:

由于firebase事件发生在AngularJS框架之外,因此对$ scope的更改需要使用$ scope。$
apply()

$scope.$apply(function() {
    $scope.progress = progress;
});

从文档中:

Angular通过提供自己的事件处理循环来修改常规JavaScript流。这将JavaScript分为经典和Angular执行上下文。只有在Angular执行上下文中应用的操作才能受益于Angular数据绑定,异常处理,属性监视等。您可以使用$
apply()
从JavaScript输入Angular执行上下文。

请记住,在大多数地方(控制器,服务)$apply已经由处理事件的指令为您调用。$apply仅当实现自定义事件回调或 使用第三方库回调时
,才需要显式调用

有关更多信息,请参见

  • AngularJS开发人员指南-与浏览器事件循环集成


 类似资料:
  • 问题内容: 我这里有一些有角度的js代码。 以及带有MySQL代码的node js。我能够从此节点代码将数据传递到MySQL DB。如何继续对Node JS进行角度测试?我来自PHP背景。我应该能够将数据从angular js表单发送到MySQL数据库。我可以从这里的节点代码向MySQL数据库发送数据。 问题答案: 它可能是您入门的垫脚石: Index.html 角度代码app.js server

  • 问题内容: 我试图弄清楚是否有任何方法可以将索引参数传递给Promise的回调函数。例如。 现在我想将数组索引参数传递为 能做到吗?请告诉我。 这是下面的代码 问题答案: 您可以为此使用闭包。 例如,在您的代码中,使用类似以下内容的代码:

  • 类BookDescription:AppCompatActivity(){override fun onCreate(savedInstanceState:Bundle?){super.onCreate(savedInstanceState)setContentView(R.Layout.Activity_Book_Description) 类适配器(private val Context:Con

  • 我创建了一个新的电子应用程序。 在索引中。jsi使用节点文件系统加载数据 如果我试着使用require。JSIT之所以能够工作,是因为它运行在不同的线程上,而不是使用节点进行初始化,更像是一个实际的浏览器窗口。但有没有办法从索引中传递数据呢。js到main。js 我不知道我对这个问题的看法是否部分正确 如果您需要更多代码或信息,请询问!

  • 问题内容: 在我的AngularJS应用程序中,我正在执行以下操作 现在,我需要访问成功回调中的值,即,我需要知道在发出请求时它具有哪个值。 有什么“最佳实践”怎么做? PS:我可以执行以下操作,但是有更好的方法吗? 问题答案: 解决方案1: 解决方案2(根据Jim Hong的回答更新):

  • 问题内容: 我有一个执行http POST请求的函数。代码在下面指定。这很好。 我为http GET提供了另一个功能,我想将数据发送到该请求。但是我没有那个选择。 的语法是 获取(URL,配置) 问题答案: HTTP GET请求不能包含要发布到服务器的数据。但是,您可以将查询字符串添加到请求中。 angular.http为此提供了一个选项。 请参阅:http : //docs.angularjs.