编辑:我更新代码块,因为我做了更改,错误在底部
所以我在我的指令里面。我想刷新页面。 (比如滚动刷新后)
以角度方式做到这一点的正确角度方法是什么? (我可以用jquery破解它,但我试图以角度方式做事)
我的计划是获取我目前所处的网址。 然后设置$ location.path(我当前的url);
它不起作用,因为我似乎无法弄清楚我当前的网址是什么。
// USAGE: <div alert-bar alertMessage="myMessageVar"></div>
angular.module('foo.directives').
directive('iScroll', ['$rootScope', '$parse', '$location', function($rootScope, $parse, $location) {
return {
restrict: 'C',
link: function(scope, elem, attrs) {
console.log("iscroll!");
//document.addEventListener('touchmove', function (e) { e.preventDefault(); }, false);
new iScroll('wrapper', { useTransition: false, bounce:true, vScroll:true,
onScrollEnd: function ($location) {
console.log("onScrollEnd");
//x=$location.path();
x=$location.url();
console.log("url is "+x);
},
} );
}
}
}]);
现在产生
未捕获的TypeError:无法调用未定义的方法'url'
// USAGE: <div alert-bar alertMessage="myMessageVar"></div>
angular.module('foo.directives').
directive('iScroll', ['$rootScope', '$parse', '$location', function($rootScope, $parse, $location) {
return {
restrict: 'C',
link: function(scope, elem, attrs) {
console.log("iscroll!");
//document.addEventListener('touchmove', function (e) { e.preventDefault(); }, false);
new iScroll('wrapper', { useTransition: false, bounce:true, vScroll:true,
onScrollEnd: function ($location) {
console.log("onScrollEnd");
//x=$location.path();
x=$location.path();
console.log("path is "+x);
},
} );
}
}
}]);
现在产生
未捕获的TypeError:无法调用未定义的方法'path'
答案 0 :(得分:2)
在你的指令定义中,$ location被注入$ parse并$ $解析为$ location。
日志中的对象是$ parse(来自角度来源):
$parse = function(exp) {
switch(typeof exp) {
case 'string':
return cache.hasOwnProperty(exp)
? cache[exp]
: cache[exp] = parser(exp, false, $filter, $sniffer.csp);
case 'function':
return exp;
default:
return noop;
}
};
这应该有效:
angular.module('foo.directives').directive('iScroll', ['$rootScope', '$parse', '$location', function($rootScope, $parse, $location) {
return {
restrict: 'C',
link: function(scope, elem, attrs) {
new iScroll('wrapper', { useTransition: false, bounce:true, vScroll:true,
onScrollEnd: function () {
console.log("onScrollEnd");
console.log("url is " + $location.url());
},
});
}
}
}]);
答案 1 :(得分:0)
事实证明我知道如何做到这一点。获取当前位置&amp;然后将location.path()设置为相同的位置是一个相当差的刷新。
我所做的是在我的一个控制器中写一个刷新功能
$scope.refresh = function() {
return Headlines.get(queryId).then( function( headlines ) {
// modify the view of the page you wanted to refresh here by updating your data
});
然后修改我的指令以调用该刷新函数。注意:你需要范围。$ apply(function(){}围绕刷新函数,否则它只会在iscroll完成操作页面之后发生。
angular.module('foo.directives').directive('iScroll', ['$rootScope', '$parse', '$location', function($rootScope, $parse, $location) {
return {
restrict: 'C',
link: function(scope, elem, attrs) {
console.log("iscroll!");
document.addEventListener('touchmove', function (e) { e.preventDefault(); }, false);
new iScroll('wrapper', { useTransition: false, bounce:true, vScroll:true,
onScrollEnd: function ($location) {
console.log("onScrollEnd");
scope.$apply(function() {
scope.refresh();
});
},
});
}
}
}]);