Angularjs 角度范围是否安全?
这条线跟在后面 所以我想知道,如果不是用手工复制属性/方法 这样做安全吗Angularjs 角度范围是否安全?,angularjs,angularjs-scope,Angularjs,Angularjs Scope,这条线跟在后面 所以我想知道,如果不是用手工复制属性/方法 这样做安全吗 .factory('MyTest',function(){ return { prop: 'Mytest', myFunc: function(){ alert('Hello'); } } }) .controller('IndexCtrl', function ($scope,M
.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);
您可能会面临变量和函数冲突
因此……您可以查看该函数的源代码,看看它是否安全:
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;
}
您可以查看函数的源代码,并查看它是否安全:
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;
}
对于方法,我们将如何做同样的事情?你能给我一个提示吗?你说的“对方法做同样的事情”是什么意思??使用
extend
将所有属性(以及函数)复制到目标对象。我已经更新了代码。你觉得怎么样?我又更新了代码。为什么使用prototype不起作用?如果你查看源代码,你会看到只有自己的属性被复制。对于方法,我们将如何做同样的事情?你能给我一个提示吗?你说的“对方法做同样的事情”是什么意思??使用extend
将所有属性(以及函数)复制到目标对象。我已经更新了代码。你觉得怎么样?我又更新了代码。为什么使用prototype不起作用?如果你查看源代码,你会看到只有自己的属性被复制。达斯汀·霍夫曼曾经被问过同样的问题。。。结果不得而知。达斯汀·霍夫曼曾经被问过同样的问题。。。结果不得而知。