我有暴露模块模式,看起来像这样:
'use strict';
angular.module('app', [])
.directive('myDirective', ['SomeDep', function (SomeDep) {
var linker = function (scope, element, attr) {
// some work
};
return {
link: linker,
restrict: 'E'
};
}])
;
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是将$ watch集成到这里.通过'$ window'服务专门观看窗口调整大小.
[编辑]:
我一直意识到我的问题是什么......当我忘记我将它作为属性实现时,我正在限制元素... @ _ @;
我的routeProvider for route将reloadOnSearch设置为false:
$routeProvider
.when(
"/film/list",
{
templateUrl: '/film/list.html',
controller: FilmListController,
reloadOnSearch: false
}
....
)
Run Code Online (Sandbox Code Playgroud)
我这样做是因为我不希望在查询字符串更改后重新加载整个控制器,但我仍然使用它,并且url看起来像这样:film/list?sort=isbn&order=asc&offset=0.现在每当查询字符串更改时,我想从我的控制器调用一个函数.所以我试着在控制器中设置$ watch:
$scope.location = $location;
$scope.$watch( 'location.search()', function( search) {
$scope.list();
});
Run Code Online (Sandbox Code Playgroud)
但这不起作用.如果我设置$ watch来查看查询字符串的单个参数的更改,那么它可以工作.但我不想为查询字符串的每个参数设置$ watch.我现在使用的解决方案是:
$scope.location = $location;
$scope.$watch( 'location.url()', function( url ) {
if($location.path() == '/film/list')
$scope.list();
});
Run Code Online (Sandbox Code Playgroud)
因此,我不是观察搜索,而是观察整个网址,然后检查路径是否是我在routeProvider中设置的路径,以有条件地调用该函数.我不喜欢这个解决方案是我必须明确键入要匹配的$ location.path的值.
任何人都可以建议一个更好的解决方案,也许可以解释为什么$ watch不适用于$ location.search()?
如何在Xcode 4中添加要监视的表达式?
这应该是非常明显的,但事实并非如此.它似乎没有任何菜单或上下文点击可用.如果我可以突出显示变量或表达式,然后"添加到监视"或"添加表达式",那将是很好的.
我想看一个单个文件不断增长的大小,所以我使用这个命令:
texai@maelstrom ~$ ls -lh club_prod.sql | awk '{print $5}'
116M
Run Code Online (Sandbox Code Playgroud)
现在我想每5秒看一次结果:
texai@maelstrom ~$ watch -n 5 ls -lh club_prod.sql | awk '{print $5}'
Run Code Online (Sandbox Code Playgroud)
但是这个命令不会返回任何结果
我正在实现购物车,并希望将数据存储在localStorage中.我想观察变量$scope.cart的变化,以便我可以更新localStorage
cart变量如下所示:
[{'name':'foo', 'id':'bar', 'amount': 1 },...]
Run Code Online (Sandbox Code Playgroud)
这是手表的代码.
$scope.updateCart = function(){
localStorageService.add('cart',JSON.stringify($scope.cart));
alert('cart updated');
};
$scope.$watch($scope.cart, $scope.updateCart(), true);
Run Code Online (Sandbox Code Playgroud)
这是用户更改模型的HTML.
<li ng-repeat="item in cart">
{{item.name}} <input type="text" ng-model="item.amount">
</li>
Run Code Online (Sandbox Code Playgroud)
使用以下代码,updateCart()永远不会触发该方法.我不确定我做错了什么.我检查$scope.cart变量确实发生了变化,但未触发更新.
我正试图从控制器中观察服务的变化.我在stackoverflow上尝试了很多基于很多qns的东西,但我一直无法使它工作.
HTML:
<div ng-app="myApp">
<div ng-controller="MyCtrl">
<div ng-click="setFTag()">Click Me</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
JavaScript的:
var myApp = angular.module('myApp',[]);
myApp.service('myService', function() {
this.tags = {
a: true,
b: true
};
this.setFalseTag = function() {
alert("Within myService->setFalseTag");
this.tags.a = false;
this.tags.b = false;
//how do I get the watch in MyCtrl to be triggered?
};
});
myApp.controller('MyCtrl', function($scope, myService) {
$scope.setFTag = function() {
alert("Within MyCtrl->setFTag");
myService.setFalseTag();
};
$scope.$watch(myService.tags, function(newVal, oldVal) {
alert("Inside watch");
console.log(newVal);
console.log(oldVal);
}, true);
});
Run Code Online (Sandbox Code Playgroud)
如何让手表在控制器中触发?
我希望在父作用域中发生状态更改时在指令内执行函数.
实现这一目标的显而易见的方法是使用事件广播($ broadcast)和监听器($ on).
我很好奇,如果使用$ watch是事件广播的替代方案.如果是的话,两者如何比较?
据我所知,每个$ digest周期都会评估要监视的表达式.活动比手表更有效吗?
fs.watch( 'example.xml', function ( curr, prev ) {
// on file change we can read the new xml
fs.readFile( 'example.xml','utf8', function ( err, data ) {
if ( err ) throw err;
console.dir(data);
console.log('Done');
});
});
Run Code Online (Sandbox Code Playgroud)
OUTPUT:
- 一些数据
- 完成X 1
- 一些数据
- 完成X 2
这是我的使用错误还是..?
watch ×10
angularjs ×5
javascript ×3
debugging ×2
listener ×2
breakpoints ×1
command-line ×1
directive ×1
events ×1
expression ×1
linux ×1
node.js ×1
object ×1
properties ×1
resize ×1
shell ×1
window ×1
windows-8 ×1
xcode4 ×1