我正在玩一个角度应用程序,它使用websocket与后端进行通信.我在使角度的数据绑定正常工作时遇到了一些麻烦.
在下面的示例中,我创建了一个创建websocket连接的服务.如果websocket收到消息,我只需将该消息推送到包含所有收到的消息的数组中.
在我的控制器中,我将该消息数组绑定到作用域,然后用于ng-repeat在部分视图中列出它们.
服务:
factory('MyService', [function() {
var wsUrl = angular.element(document.querySelector('#ws-url')).val();
var ws = new WebSocket(wsUrl);
ws.onopen = function() {
console.log("connection established ...");
}
ws.onmessage = function(event) {
Service.messages.push(event.data);
}
var Service = {};
Service.messages = [];
return Service;
}]);
Run Code Online (Sandbox Code Playgroud)
控制器:
controller('MyCtrl1', ['$scope', 'MyService', function($scope, MyService) {
$scope.messages = MyService.messages;
}])
Run Code Online (Sandbox Code Playgroud)
部分:
<ul>
<li ng-repeat="msg in messages">
{{msg}}
</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
但是这不能正常工作.当收到新消息并将其推送到阵列中时,应显示所有消息的列表不会更新.我预计它会因为角度双向数据绑定而更新.
我找到了一个解决方案,它通过将消息的推送包装到服务中的调用中来$rootScope.apply()实现:
ws.onmessage = function(event) {
$rootScope.$apply(function() {
Service.messages.push(event.data);
});
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:
这是角度的预期行为,如果我不使用,我的列表不会自动更新$rootScope.apply()吗?
为什么我甚至需要把它包起来 …
我目前正在开发一个主要用于自我教育目的的应用程序,因为我还没有完全习惯于js,我可以使用一些帮助解决我的问题:
在我的应用程序中,我使用的是一个javascript库(jqMobi),用于DOM操作,页面转换,ajax调用等,我还使用phonegap访问设备功能,如地理位置.
当我启动我的应用程序时,我想获取设备的地理位置,向我的服务器发送ajax(jsonp)请求(包括设备的地理位置),该请求返回一个json对象数组,我将用它来构建一个列表.
在我获得地理位置之前,我需要等待phonegap加载.在使用jqMobi进行ajax调用并处理响应之前,我需要等待它加载.
所以我基本上要听的事件
document.addEventListener("DOMContentLoaded",execute_this,false); //jqMobi is now ready
document.addEventListener("deviceready", execure_sth, false); //Phonegap is now ready
Run Code Online (Sandbox Code Playgroud)
一旦这两个事件都被触发而不是之前,我该如何执行一个函数?
如果我使用jQuery,我会使用它的$ .Deferred对象及其When ... Then Function,但由于我无法访问这些,我正在寻找替代方案.
在此先感谢您的帮助!
我需要修改一个PHAR文件.每当我对文件进行更改然后执行它时,我都会收到以下错误消息:
Fatal error: Uncaught exception 'PharException' with message SHA1 signature could not be verified: broken signature'
Run Code Online (Sandbox Code Playgroud)
通过做一些研究,我发现我可以
提取phar,修改它然后"将其放回phar文件".我怎么做?
或者phar.require_hash = false在我的php.ini中设置以禁用签名检查.不幸的是,这并没有解决问题
我只需要对文件做一些简单的修改,我是唯一一个要使用它的人,所以我更希望快速简单地解决问题
如果我按以下方式加载客户:
$customer = Mage::getModel('customer/customer')
->load($customer_id);
Run Code Online (Sandbox Code Playgroud)
是什么区别:
$customer -> getDefaultShippingAddress();
Run Code Online (Sandbox Code Playgroud)
和
$customer -> getPrimaryShippingAddress();
Run Code Online (Sandbox Code Playgroud)
提前致谢!
为什么我可以在doStuff()下面的主要方法中访问方法?既然doStuff()受到保护,我希望只能TestClassImplementation访问它.
public abstract class AbstractTestClass {
protected void doStuff()
{
System.out.println("doing stuff ...");
}
}
public class TestClassImplementation extends AbstractTestClass{
}
public class MyProgram {
public static void main(String[] args) {
TestClassImplementation test = new TestClassImplementation();
test.doStuff(); //why can I access the doStuff() Method here?
}
}
Run Code Online (Sandbox Code Playgroud) 我有以下jQuery代码在Firefox和Internet Explorer中正常工作.它在Chrome中不起作用,我无法弄清楚原因.
我正在尝试background-image使用此代码更改元素:
$(".category-nav").find("a").each(function(index){
if($(this).css("background-color") === "transparent" && !$(this).parent().hasClass("level1"))
{
$(this).css("background-image", "url(/images/gallery/images/arrow-cat-list-grey.png)");
}
});
Run Code Online (Sandbox Code Playgroud) function validateDate( $date )
{
echo $date;
//2012-08-24 20:30:00
if(preg_match('/^([0-9]{4})-([0-9]{2})-([0-9]{2}) ([1-2]{1})([0-9]{1}):([0-5]{1})([0-9]{1}):([0-5]{1})([0-9]{1})$/', $date) >= 1)
{
return true;
}
else
{
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
这总是返回false.我使用了一个唯一的工具来构建正则表达式,它在那里工作得很好.当我将"/"添加到正则表达式时,麻烦就开始了.不知何故PHP似乎需要这些,但我不知道为什么,我不知道为什么它打破了我的正则表达式.
它应该返回TRUE for sth.像"2012-08-24 20:30:00"和"asdf2012-08-24 20:30:00asdf"或任何不符合我的正则表达式的任何错误
提前致谢!
-----------------------编辑感谢您的所有答案!
正如一些用户指出我的函数在样本日期"2012-08-24 20:30:00"返回true.但是,只有当我手动设置$ date ='2012-08-24 20:30:00'时才会这样做.如果我使用完全相同的字符串在我的代码中的其他地方调用该函数,则返回false.有谁知道为什么?
----------------------- EDIT2
对不起浪费你的时间,实际上是一些空格被添加到字符串中.在调用我的函数之前在我的日期使用trim()会给出正确的结果.
感谢大家!
javascript ×2
php ×2
angularjs ×1
dom-events ×1
java ×1
jquery ×1
magento ×1
phar ×1
preg-match ×1
websocket ×1