此主题遵循angularjs share data config between controllers
所以我想知道是否不是手工复制属性/方法 像
一样安全吗?.factory('MyTest',function(){
return {
prop: 'Mytest',
myFunc: function(){
alert('Hello');
}
}
})
.controller('IndexCtrl', function ($scope,MyTest) {
angular.extend($scope,MyTest);
console.log($scope);
})
更新 它当然只适用于财产 但如果它安全可能是一件好事 找到一种方法来应用它也是方法。
更新1
这似乎是一个好方法:
'use strict';
(function(window, angular, undefined) {
'use strict';
angular.module('ctrl.parent', [])
.controller('ParentController',function (scope) {
scope.vocalization = '';
scope.vocalize = function () {
console.log(scope.vocalization);
};
});
})(window, angular);
angular.module('app',['ctrl.parent'])
.controller('ChildCtrl', function($scope,$controller){
angular.extend($scope, new $controller('ParentController', {scope:$scope}));
$scope.vocalization = 'BARK BARK';
});
归功于@marfarma
更新2
我想知道为什么这不起作用
'use strict';
angular.module('animal', [])
.factory('Animal',function(){
return function(vocalization){
return {
vocalization:vocalization,
vocalize : function () {
console.log('vocalize: ' + this.vocalization);
}
}
}
});
angular.module('app', ['animal'])
.factory('Dog', function (Animal) {
function ngPost() {};
ngPost.prototype.status = ['publish','draft'];
return angular.extend(Animal('bark bark!'), new ngPost());
})
.factory('Cat', function (Animal) {
return Animal('meeeooooow');
})
.controller('MainCtrl',function($scope,Cat,Dog){
$scope.cat = Cat;
$scope.dog = Dog;
console.log($scope.cat);
console.log($scope.dog);
//$scope.cat = Cat;
});
这是有效的
.factory('Dog', function (Animal) {
function ngDog(){
this.prop = 'my prop';
this.myMethod = function(){
console.log('test');
}
}
return angular.extend(Animal('bark bark!'), new ngDog());
})
更新3
抱歉再次打扰你,但经过一段时间的思考 这个帖子我觉得我的问题被误解了(或者我没有清楚地解释清楚)我想要的真正知道如果这样做angular.extend($scope,MyService)
可能是糟糕/良好的做法 是打破oop封装原理? 我的意思是它闻起来像
MyService.call($scope);
你可能面临变量和功能冲突
所以.......
答案 0 :(得分:4)
您可以查看extend
功能的来源并确保其安全:
function extend(dst) {
var h = dst.$$hashKey;
forEach(arguments, function(obj){
if (obj !== dst) {
forEach(obj, function(value, key){
dst[key] = value;
});
}
});
setHashKey(dst,h);
return dst;
}