我正在尝试返回从工厂到控制器的绑定范围。如果我可以传递这个名字,那将是理想的,因为它可能是动态的。这是我到目前为止所拥有的
.factory('urlWatch', function (urlFactory) {
var _this = this;
return {
listenToUrl: function (scope, moduleName, stateName) {
scope.$on('$locationChangeSuccess', function (event) {
console.log(scope.bind);
scope = urlFactory.parseState(moduleName, stateName);
});
}
};
return _this;
});
在控制器中我有
$scope.mod1m3 = urlWatch.listenToUrl($scope, "module1", "mod1");
所以这不起作用,但如果我将工厂更改为这样
listenToUrl: function (scope, moduleName, stateName) {
scope.$on('$locationChangeSuccess', function (event) {
console.log(scope.bind);
scope.mod1m3 = urlFactory.parseState(moduleName, stateName);
});
}
我想做的是将其改为
listenToUrl: function (scope, moduleName, stateName, bind) {
scope.$on('$locationChangeSuccess', function (event) {
scope.bind = urlFactory.parseState(moduleName, stateName);
});
}
和
$scope.mod1m3 = urlWatch.listenToUrl($scope, "module1", "mod1", "mod1m3");
然而它似乎并不想连接2,我得到了:
TypeError: Cannot read property '$on' of undefined
不确定如何让它连接以使其按预期工作。谢谢!
答案 0 :(得分:1)
由于$ scope attributre应该是动态的并保存在变量bind
中,请使用:
listenToUrl: function (scope, moduleName, stateName, bind) {
scope.$on('$locationChangeSuccess', function (event) {
// use scope like an associative array
scope[bind] = urlFactory.parseState(moduleName, stateName);
});
}
如果使用,在控制器中就足够了。
urlWatch.listenToUrl($scope, "module1", "mod1", "mod1m3");
$ scope.mod1m3将是parseState返回的任何内容